{
 "firmware": "M-VAVE FM-1 Open (official)",
 "slug": "mvaveopen",
 "author": "M-VAVE (珠海笙科智能科技有限公司)",
 "repo": "https://github.com/m-vave/fm1_open",
 "licence": "GPL-3.0-only with the FM1 SDK linking permission; the native binary SDK has separate terms",
 "closed_source": false,
 "mapped_release": "V12",
 "mapped_commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
 "release_date": "2026-10-14",
 "date_mapped": "2026-10-16",
 "turns_it_into": "An eight-track groovebox with FM, 303, 808, PSG, pluck and sample sources, a step editor and Bluetooth controls.",
 "docs": [
  {
   "title": "English README",
   "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/README.md",
   "read_at": "V12",
   "source": [
    {
     "kind": "doc",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "README.md",
     "lines": "1-31",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/README.md#L1-L31"
    }
   ]
  },
  {
   "title": "APP licence and SDK linking permission",
   "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/LICENSE.md",
   "source": [
    {
     "kind": "doc",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "LICENSE.md",
     "lines": "1-25",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/LICENSE.md#L1-L25"
    }
   ]
  },
  {
   "title": "Separate SDK and third-party terms",
   "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/THIRD_PARTY.md",
   "source": [
    {
     "kind": "doc",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "THIRD_PARTY.md",
     "lines": "23-41",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/THIRD_PARTY.md#L23-L41"
    }
   ]
  },
  {
   "title": "Workbench user guide (English via I18n.js)",
   "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L159-L266",
   "read_at": "V12",
   "source": [
    {
     "kind": "doc",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "sdk/Update.html.in",
     "lines": "159-266",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L159-L266"
    },
    {
     "kind": "doc",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "sdk/I18n.js",
     "lines": "331-345",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/I18n.js#L331-L345"
    }
   ]
  }
 ],
 "install": {
  "official": "https://github.com/m-vave/fm1_open/releases/tag/V12",
  "hub": "https://thefirmwarehub.com/",
  "workbench": "https://open.m-vave.com/fm1-workbench",
  "release_workbench": "https://github.com/m-vave/fm1_open/releases/download/V12/FM1-Open-V12-Workbench.html",
  "source": [
   {
    "kind": "doc",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "README.md",
    "lines": "7-9",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/README.md#L7-L9"
   }
  ]
 },
 "part_id_notes": "The printed SEL button is SCL in this APP; encoder index 1 is ALGORITHM and index 6 is PRESETS, with indices 2–5 for KNOB 1–4. Modes include page families and recording/held states: the narrower state overrides the page, and a specific entry overrides an any fallback. Keyboard means every note-playing page except its explicitly reassigned keys; recording overrides ordinary step-key navigation. All read-in-source claims describe APP routing, displayed values or requests to the SDK, not measured sound. This is the Open V12 APP, not the bundled stock FM-1_015 image. No source or firmware was executed. Parent page-family entries apply to their child modes as listed in inherits; narrower entries override parent entries only for the same job, and conditional entries on the same part coexist. Keyboard note posting still applies alongside a pad-selection job. GLO overrides ordinary pages, while HOME combinations and navigation buttons are processed before GLO. Keys already held across a page or navigation-mode change stay blocked until released.",
 "modes": [
  {
   "id": "overview",
   "name": "Track overview",
   "how_to_get_there": "Press HOME from another page.",
   "what_it_is": "Eight tracks and their patterns, source types, levels and mute/solo states.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "518-593",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L518-L593"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1925-1930",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1925-L1930"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "keyboard",
   "name": "Playable keyboard",
   "how_to_get_there": "Use the overview or a sound, effects or arp page.",
   "what_it_is": "Local keys post notes unless that page reassigns them; navigation pages suppress notes.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "288-292",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2451-2487",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2487"
    }
   ]
  },
  {
   "id": "recording",
   "name": "Recording enabled",
   "how_to_get_there": "Tap REC; on the overview release it within 600 ms without turning SELECT.",
   "what_it_is": "The APP asks the engine to record local notes and follows its recording cursor.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1831-1851",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1831-L1851"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1972-1980",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1972-L1980"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2427-2429",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2427-L2429"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2548-2551",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2548-L2551"
    }
   ]
  },
  {
   "id": "steps_basic",
   "name": "SEQ Basic",
   "how_to_get_there": "Press SEQ, then turn ALGORITHM to page 1.",
   "what_it_is": "Level, step, note or pad, and tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "188",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L188"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2222-2240",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2240"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1437-1463",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1437-L1463"
    }
   ]
  },
  {
   "id": "steps_details",
   "name": "SEQ Step details",
   "how_to_get_there": "Press SEQ, then turn ALGORITHM to page 2.",
   "what_it_is": "Velocity, gate, probability and chord for the selected cell.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "188",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L188"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2222-2240",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2240"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1437-1463",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1437-L1463"
    }
   ]
  },
  {
   "id": "steps_rhythm",
   "name": "SEQ Rhythm and recording",
   "how_to_get_there": "Press SEQ, then turn ALGORITHM to page 3.",
   "what_it_is": "Swing, metronome, count-in and loop length.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "188",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L188"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2222-2240",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2240"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1437-1463",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1437-L1463"
    }
   ]
  },
  {
   "id": "steps_locks",
   "name": "SEQ Step ties and locks",
   "how_to_get_there": "Press SEQ, then turn ALGORITHM to page 4.",
   "what_it_is": "Tie, lock parameter, lock value and note.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "188",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L188"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2222-2240",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2240"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1437-1463",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1437-L1463"
    }
   ]
  },
  {
   "id": "steps_sync",
   "name": "SEQ Clock and loop",
   "how_to_get_there": "Press SEQ, then turn ALGORITHM to page 5.",
   "what_it_is": "Internal or MIDI clock, tempo and loop length.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "188",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L188"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2222-2240",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2240"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1437-1463",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1437-L1463"
    }
   ]
  },
  {
   "id": "mix",
   "name": "Mixer",
   "how_to_get_there": "Tap and release GLO within 600 ms.",
   "what_it_is": "Mute, solo and levels across two banks of four tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1909-1914",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1909-L1914"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1995-2005",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "941-964",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L941-L964"
    }
   ]
  },
  {
   "id": "mix_hold",
   "name": "Held mixer",
   "how_to_get_there": "Hold GLO for 600 ms, or use a key or encoder while holding it.",
   "what_it_is": "A temporary mixer over the previous page, closed when GLO is released.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1909-1914",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1909-L1914"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1992-2005",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1361",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1361"
    }
   ]
  },
  {
   "id": "browser",
   "name": "Project browser",
   "how_to_get_there": "Press HOME on the overview.",
   "what_it_is": "USER and FACTORY banks of sixteen whole projects, loaded as selection changes.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1928-1930",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1928-L1930"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2018-2039",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2018-L2039"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1108-1126",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1108-L1126"
    }
   ]
  },
  {
   "id": "project",
   "name": "Save project",
   "how_to_get_there": "Press SAVE outside Source, Actions and Bluetooth.",
   "what_it_is": "Choose one of sixteen user slots and edit the working project name.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1984-1990",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1984-L1990"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2113-2148",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2113-L2148"
    }
   ]
  },
  {
   "id": "source",
   "name": "Source chooser",
   "how_to_get_there": "Turn ALGORITHM or KNOB 2 on the overview, or hold HOME and turn PRESETS.",
   "what_it_is": "Preview one of six source types and apply with SAVE.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "173",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L173"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1883-1890",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1883-L1890"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2042-2054",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2042-L2054"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2205-2219",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2205-L2219"
    }
   ]
  },
  {
   "id": "actions",
   "name": "Edit actions",
   "how_to_get_there": "Hold SEQ for 600 ms, or press SEQ with EDIT.",
   "what_it_is": "Step, page, track and timbre operations, undo, naming, clock settings and reset.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1892-1901",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1892-L1901"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2056-2111",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2056-L2111"
    }
   ]
  },
  {
   "id": "name",
   "name": "DX7 patch name",
   "how_to_get_there": "On a DX7 track press EDIT with REC, or select the naming action.",
   "what_it_is": "Edit ten patch-name characters in the working project.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1915-1920",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1915-L1920"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2093-2095",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2093-L2095"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2149-2156",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2149-L2156"
    }
   ]
  },
  {
   "id": "bluetooth",
   "name": "Bluetooth settings",
   "how_to_get_there": "Press HOME with GLO, or choose Bluetooth / Clock in Actions.",
   "what_it_is": "Radio master, audio, MIDI role and clock, plus pair clearing.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1878-1881",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1878-L1881"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1006-1023",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1006-L1023"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2157-2184",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2157-L2184"
    }
   ]
  },
  {
   "id": "midi_host",
   "name": "MIDI host list",
   "how_to_get_there": "In Bluetooth settings enable the radio, choose HOST and execute the device-list action.",
   "what_it_is": "Select, scan, connect or disconnect a BLE MIDI device.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1024-1046",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1024-L1046"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2179-2196",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2179-L2196"
    }
   ]
  },
  {
   "id": "fm_quick",
   "name": "DX7 quick edit",
   "how_to_get_there": "Tap EDIT on a DX7 track.",
   "what_it_is": "Algorithm, feedback, transpose and track level.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1946-1952",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1946-L1952"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1325-1339",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1325-L1339"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2258-2261",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2258-L2261"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "fm_edit",
   "name": "DX7 full editor",
   "how_to_get_there": "Hold EDIT for 600 ms on a DX7 track.",
   "what_it_is": "Black keys select operators, pitch, common, mono or poly; SELECT changes pages.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1959-1963",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1959-L1963"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2315-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2360"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "fm_tune",
   "name": "Tune and level",
   "how_to_get_there": "In full DX7 edit select an operator, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "162",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L162"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_rates",
   "name": "Operator rates",
   "how_to_get_there": "In full DX7 edit select an operator, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "163",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L163"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_levels",
   "name": "Operator levels",
   "how_to_get_there": "In full DX7 edit select an operator, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "164",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L164"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_sensitivity",
   "name": "Sensitivity and oscillator",
   "how_to_get_there": "In full DX7 edit select an operator, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "165",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L165"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_scaling",
   "name": "Keyboard scaling",
   "how_to_get_there": "In full DX7 edit select an operator, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "166",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L166"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_curves",
   "name": "Scaling curves",
   "how_to_get_there": "In full DX7 edit select an operator, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "167",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L167"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_pitch_rates",
   "name": "Pitch rates",
   "how_to_get_there": "In full DX7 edit press the PITCH black key, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "168",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L168"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_pitch_levels",
   "name": "Pitch levels",
   "how_to_get_there": "In full DX7 edit press the PITCH black key, then turn SELECT.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "169",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L169"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_common",
   "name": "Common",
   "how_to_get_there": "In full DX7 edit press the GLOBAL black key.",
   "what_it_is": "KNOB 1–4 send the four displayed patch parameters; blank positions send the unused index 255.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "170",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "689-695",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2340-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2360"
    }
   ],
   "inherits": [
    "fm_edit",
    "keyboard"
   ]
  },
  {
   "id": "fm_env",
   "name": "Envelope page",
   "how_to_get_there": "Tap ENV; tap again to return.",
   "what_it_is": "DX7 uses an amplitude ADSR overlay; other sources use a source-specific subset of tone parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "333-339",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L333-L339"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "804-820",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1953-1955",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1953-L1955"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "fm_env_dx7",
   "name": "DX7 amplitude envelope",
   "how_to_get_there": "Tap ENV on a DX7 track.",
   "what_it_is": "Four overlay values and bypass, separate from the DX7 operator envelopes.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "738-750",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L738-L750"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1479-1483",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1479-L1483"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2353-2357",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2357"
    }
   ],
   "inherits": [
    "fm_env",
    "keyboard"
   ]
  },
  {
   "id": "fm_lfo",
   "name": "DX7 LFO",
   "how_to_get_there": "Tap LFO on a DX7 track; SELECT changes its two pages.",
   "what_it_is": "Two groups of patch LFO parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "170-172",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170-L172"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2348-2351",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2348-L2351"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "fm_lfo_main",
   "name": "DX7 LFO main",
   "how_to_get_there": "Tap LFO on a DX7 track, then turn SELECT to page 1.",
   "what_it_is": "Four displayed DX7 patch fields.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "171",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L171"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2348-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2348-L2360"
    }
   ],
   "inherits": [
    "fm_lfo",
    "keyboard"
   ]
  },
  {
   "id": "fm_lfo_mod",
   "name": "DX7 LFO mod",
   "how_to_get_there": "Tap LFO on a DX7 track, then turn SELECT to page 2.",
   "what_it_is": "Four displayed DX7 patch fields.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "172",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L172"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2348-2360",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2348-L2360"
    }
   ],
   "inherits": [
    "fm_lfo",
    "keyboard"
   ]
  },
  {
   "id": "track_lfo",
   "name": "Non-FM track LFO",
   "how_to_get_there": "Tap LFO on any source other than DX7.",
   "what_it_is": "Rate, depth, volume/pan target and waveform values.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "822-850",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L822-L850"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2274-2276",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2274-L2276"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "tone_edit",
   "name": "Non-FM tone edit",
   "how_to_get_there": "Tap EDIT on a non-FM track.",
   "what_it_is": "The first four descriptors for the current source or pad; holding EDIT enables page navigation.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1946-1952",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1946-L1952"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2277-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2314"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "tone_advanced",
   "name": "Non-FM full edit",
   "how_to_get_there": "Hold EDIT for 600 ms on a non-FM track, or press SEL.",
   "what_it_is": "SELECT pages through groups of four engine-supplied parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1936-1945",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1936-L1945"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1959-1963",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1959-L1963"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2299-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
    }
   ],
   "inherits": [
    "tone_edit",
    "keyboard"
   ]
  },
  {
   "id": "bass_filter",
   "name": "303 filter",
   "how_to_get_there": "On BASS 303 hold EDIT, then turn SELECT to page 1.",
   "what_it_is": "Four parameter indices declared by the APP 303 interface.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/synth/bass303.h",
     "lines": "7-14",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2299-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
    }
   ],
   "inherits": [
    "tone_advanced",
    "tone_edit",
    "keyboard"
   ]
  },
  {
   "id": "bass_osc",
   "name": "303 osc",
   "how_to_get_there": "On BASS 303 hold EDIT, then turn SELECT to page 2.",
   "what_it_is": "Four parameter indices declared by the APP 303 interface.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/synth/bass303.h",
     "lines": "7-14",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2299-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
    }
   ],
   "inherits": [
    "tone_advanced",
    "tone_edit",
    "keyboard"
   ]
  },
  {
   "id": "bass_drive",
   "name": "303 drive",
   "how_to_get_there": "On BASS 303 hold EDIT, then turn SELECT to page 3.",
   "what_it_is": "Four parameter indices declared by the APP 303 interface.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/synth/bass303.h",
     "lines": "7-14",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2299-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
    }
   ],
   "inherits": [
    "tone_advanced",
    "tone_edit",
    "keyboard"
   ]
  },
  {
   "id": "env_303",
   "name": "303 envelope",
   "how_to_get_there": "Tap ENV on the 303 source.",
   "what_it_is": "A selected subset of source parameters; absent descriptors leave blank knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "804-820",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2277-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2314"
    }
   ],
   "inherits": [
    "fm_env",
    "keyboard"
   ]
  },
  {
   "id": "env_psg",
   "name": "PSG envelope",
   "how_to_get_there": "Tap ENV on the PSG source.",
   "what_it_is": "A selected subset of source parameters; absent descriptors leave blank knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "804-820",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2277-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2314"
    }
   ],
   "inherits": [
    "fm_env",
    "keyboard"
   ]
  },
  {
   "id": "env_pluck",
   "name": "PLUCK envelope",
   "how_to_get_there": "Tap ENV on the PLUCK source.",
   "what_it_is": "A selected subset of source parameters; absent descriptors leave blank knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "804-820",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2277-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2314"
    }
   ],
   "inherits": [
    "fm_env",
    "keyboard"
   ]
  },
  {
   "id": "env_sample",
   "name": "SAMPLE envelope",
   "how_to_get_there": "Tap ENV on the SAMPLE source.",
   "what_it_is": "A selected subset of source parameters; absent descriptors leave blank knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "804-820",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2277-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2314"
    }
   ],
   "inherits": [
    "fm_env",
    "keyboard"
   ]
  },
  {
   "id": "env_808",
   "name": "808 envelope",
   "how_to_get_there": "Tap ENV on the 808 source.",
   "what_it_is": "A selected subset of source parameters; absent descriptors leave blank knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "804-820",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2277-2314",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2314"
    }
   ],
   "inherits": [
    "fm_env",
    "keyboard"
   ]
  },
  {
   "id": "fx_track",
   "name": "Track sends",
   "how_to_get_there": "Tap FX, then turn PRESETS to track settings.",
   "what_it_is": "Track reverb/delay sends and level, or shared reverb/delay and return values.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1151-1184",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1151-L1184"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2262-2273",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "fx_shared",
   "name": "Shared effects",
   "how_to_get_there": "Tap FX, then turn PRESETS to shared settings.",
   "what_it_is": "Track reverb/delay sends and level, or shared reverb/delay and return values.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1151-1184",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1151-L1184"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2262-2273",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "arp_notes",
   "name": "ARP notes",
   "how_to_get_there": "Hold ARP for 600 ms; turn ALGORITHM to page 1.",
   "what_it_is": "Per-track arpeggiator settings sent to the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1298-1324",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1298-L1324"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2242-2249",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "arp_hold",
   "name": "ARP hold",
   "how_to_get_there": "Hold ARP for 600 ms; turn ALGORITHM to page 2.",
   "what_it_is": "Per-track arpeggiator settings sent to the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1298-1324",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1298-L1324"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2242-2249",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
    }
   ],
   "inherits": [
    "keyboard"
   ]
  },
  {
   "id": "startup",
   "name": "Startup logo",
   "how_to_get_there": "Power on.",
   "what_it_is": "A skippable version display while the APP attempts to restore settings and the remembered USER project into RAM without writing APP storage.",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1342-1357",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1342-L1357"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2530-2535",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2530-L2535"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/project.c",
     "lines": "362-382",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L362-L382"
    }
   ]
  }
 ],
 "controls": {
  "screen": [
   {
    "mode": "fm_tune",
    "gesture": "shows",
    "action": "Shows tune and level for the selected DX7 context.",
    "short_label": "TUNE / LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "162",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L162"
     }
    ]
   },
   {
    "mode": "fm_rates",
    "gesture": "shows",
    "action": "Shows operator rates for the selected DX7 context.",
    "short_label": "OP RATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "163",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L163"
     }
    ]
   },
   {
    "mode": "fm_levels",
    "gesture": "shows",
    "action": "Shows operator levels for the selected DX7 context.",
    "short_label": "OP LEVELS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "164",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L164"
     }
    ]
   },
   {
    "mode": "fm_sensitivity",
    "gesture": "shows",
    "action": "Shows sensitivity and oscillator for the selected DX7 context.",
    "short_label": "SENS / OSC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "165",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L165"
     }
    ]
   },
   {
    "mode": "fm_scaling",
    "gesture": "shows",
    "action": "Shows keyboard scaling for the selected DX7 context.",
    "short_label": "SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "166",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L166"
     }
    ]
   },
   {
    "mode": "fm_curves",
    "gesture": "shows",
    "action": "Shows scaling curves for the selected DX7 context.",
    "short_label": "CURVES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "167",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L167"
     }
    ]
   },
   {
    "mode": "fm_pitch_rates",
    "gesture": "shows",
    "action": "Shows pitch rates for the selected DX7 context.",
    "short_label": "PITCH RATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L168"
     }
    ]
   },
   {
    "mode": "fm_pitch_levels",
    "gesture": "shows",
    "action": "Shows pitch levels for the selected DX7 context.",
    "short_label": "PITCH LEVELS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "169",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L169"
     }
    ]
   },
   {
    "mode": "fm_common",
    "gesture": "shows",
    "action": "Shows common for the selected DX7 context.",
    "short_label": "COMMON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "170",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170"
     }
    ]
   },
   {
    "mode": "fm_lfo_main",
    "gesture": "shows",
    "action": "Shows the selected DX7 LFO group, waveform, key sync and pitch sensitivity.",
    "short_label": "LFO MAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "770-777",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L770-L777"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1484-1508",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1484-L1508"
     }
    ]
   },
   {
    "mode": "fm_lfo_mod",
    "gesture": "shows",
    "action": "Shows the selected DX7 LFO group, waveform, key sync and pitch sensitivity.",
    "short_label": "LFO MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "770-777",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L770-L777"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1484-1508",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1484-L1508"
     }
    ]
   },
   {
    "mode": "bass_filter",
    "gesture": "shows",
    "action": "Shows four 303 parameter values for the selected page.",
    "short_label": "303 FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-925",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L925"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     }
    ]
   },
   {
    "mode": "bass_osc",
    "gesture": "shows",
    "action": "Shows four 303 parameter values for the selected page.",
    "short_label": "303 OSC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-925",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L925"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     }
    ]
   },
   {
    "mode": "bass_drive",
    "gesture": "shows",
    "action": "Shows four 303 parameter values for the selected page.",
    "short_label": "303 DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-925",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L925"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "shows",
    "action": "Shows track sends, track level and shared return.",
    "short_label": "TRACK SENDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1151-1184",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1151-L1184"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "shows",
    "action": "Shows the shared time values for reverb and delay, alongside feedback and return.",
    "short_label": "SHARED FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1151-1184",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1151-L1184"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "shows",
    "action": "Shows the current track’s rate, direction, octave range and gate; drum tracks leave range and gate unavailable.",
    "short_label": "ARP NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1298-1324",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1298-L1324"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "shows",
    "action": "Shows the current track’s arp swing and chord-hold values.",
    "short_label": "ARP HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1298-1324",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1298-L1324"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "shows",
    "action": "Shows eight track lanes, source names, mute/solo flags, volume, meters and the current sixteen-step region.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "518-593",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L518-L593"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "shows",
    "action": "Shows sixteen cells of the chosen lane with cursor, playhead, loop length and level, step, note or pad, and tempo.",
    "short_label": "SEQ 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "632-687",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L632-L687"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1427-1463",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1427-L1463"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "shows",
    "action": "Shows sixteen cells of the chosen lane with cursor, playhead, loop length and velocity, gate, probability and chord for the selected cell.",
    "short_label": "SEQ 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "632-687",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L632-L687"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1427-1463",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1427-L1463"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "shows",
    "action": "Shows sixteen cells of the chosen lane with cursor, playhead, loop length and swing, metronome, count-in and loop length.",
    "short_label": "SEQ 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "632-687",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L632-L687"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1427-1463",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1427-L1463"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "shows",
    "action": "Shows sixteen cells of the chosen lane with cursor, playhead, loop length and tie, lock parameter, lock value and note.",
    "short_label": "SEQ 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "632-687",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L632-L687"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1427-1463",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1427-L1463"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "shows",
    "action": "Shows sixteen cells of the chosen lane with cursor, playhead, loop length and internal or MIDI clock, tempo and loop length.",
    "short_label": "SEQ 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "632-687",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L632-L687"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1427-1463",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1427-L1463"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "shows",
    "action": "Shows sixteen mute/solo tiles and four track levels for the selected bank.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "941-964",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L941-L964"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1464-1470",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1464-L1470"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "shows",
    "action": "Shows sixteen mute/solo tiles and four track levels for the selected bank.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "941-964",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L941-L964"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1464-1470",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1464-L1470"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "shows",
    "action": "Shows a USER or FACTORY project slot, its stored name and load result.",
    "short_label": "PROJECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1108-1126",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1108-L1126"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "action": "Shows the selected save slot, stored name, working name and any overwrite confirmation or write error.",
    "short_label": "SAVE PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1057-1106",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1057-L1106"
     }
    ]
   },
   {
    "mode": "source",
    "gesture": "shows",
    "action": "Shows the previewed source, an apply/cancel prompt and a warning about changing between drum and pitched patterns.",
    "short_label": "SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1272-1279",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1272-L1279"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "shows",
    "action": "Shows twenty edit commands, clipboard scope, target step and page, plus any replacement confirmation.",
    "short_label": "ACTIONS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "174-177",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1280-1297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1280-L1297"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "shows",
    "action": "Shows the ten-character DX7 patch name and character cursor.",
    "short_label": "PATCH NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1128-1149",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1128-L1149"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "shows",
    "action": "Shows radio, audio, role and clock settings with link state, errors and pair-clear confirmation.",
    "short_label": "BLUETOOTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "974-1023",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L974-L1023"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1048-1055",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1048-L1055"
     }
    ]
   },
   {
    "mode": "midi_host",
    "gesture": "shows",
    "action": "Shows discovered BLE MIDI devices and connect, scan, disconnect or settings actions.",
    "short_label": "MIDI HOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1024-1055",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1024-L1055"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "shows",
    "action": "Shows the current DX7 voice, edited marker and algorithm, feedback, transpose and level controls.",
    "short_label": "QUICK EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1325-1339",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1325-L1339"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "shows",
    "action": "Shows the selected operator or global context, algorithm or envelope diagram, patch name and parameter values.",
    "short_label": "FULL EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "697-795",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L697-L795"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "shows",
    "action": "Shows an illustrative ADSR preview and whether the amplitude overlay is enabled.",
    "short_label": "AMP ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "738-750",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L738-L750"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1479-1483",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1479-L1483"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "shows",
    "action": "On non-FM tracks shows available source envelope parameters and the selected drum or pad where applicable.",
    "short_label": "SOURCE ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-905",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L905"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "shows",
    "action": "Shows the non-FM track LFO’s rate, depth, target and waveform.",
    "short_label": "TRACK LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "822-850",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L822-L850"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "shows",
    "action": "Shows the selected source or pad and the current group of engine-supplied tone descriptors.",
    "short_label": "TONE EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "shows",
    "action": "Shows the selected source or pad and the current group of engine-supplied tone descriptors.",
    "short_label": "TONE EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "startup",
    "gesture": "shows",
    "action": "Shows the skippable Open logo while startup attempts to reload the remembered USER project into RAM without an APP flash write.",
    "short_label": "OPEN V12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1342-1357",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1342-L1357"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2530-2535",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2530-L2535"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/project.c",
      "lines": "362-382",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L362-L382"
     }
    ]
   },
   {
    "mode": "env_303",
    "gesture": "shows",
    "action": "Shows the selected source’s available envelope-control values, leaving absent descriptors blank.",
    "short_label": "303 ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "env_psg",
    "gesture": "shows",
    "action": "Shows the selected source’s available envelope-control values, leaving absent descriptors blank.",
    "short_label": "PSG ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "env_pluck",
    "gesture": "shows",
    "action": "Shows the selected source’s available envelope-control values, leaving absent descriptors blank.",
    "short_label": "PLUCK ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "env_sample",
    "gesture": "shows",
    "action": "Shows the selected source’s available envelope-control values, leaving absent descriptors blank.",
    "short_label": "SAMPLE ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "env_808",
    "gesture": "shows",
    "action": "Shows the selected source’s available envelope-control values, leaving absent descriptors blank.",
    "short_label": "808 ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "865-940",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L865-L940"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows * in the music header when the engine reports unsaved project changes.",
    "short_label": "UNSAVED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "479-480",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L479-L480"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "In the music header, shows PLAY while running, PAUSE when stopped away from rewind, or STOP at rewind.",
    "short_label": "TRANSPORT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "463-465",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L463-L465"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "497-499",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L497-L499"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "In the music header, shows CNT 1–4 during count-in, REC or STEP while recording, otherwise ARP when enabled or LIVE.",
    "short_label": "RECORD STATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "510-515",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L510-L515"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "In the music header, shows FOLLOW for playhead following or EDIT for a pinned view.",
    "short_label": "VIEW STATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "508-509",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L508-L509"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "In the music header, shows BPM for internal clock or EXT, WAIT or LOST for the reported MIDI clock state.",
    "short_label": "CLOCK STATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "485-495",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L485-L495"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Draws a 600 ms progress bar for a pending GLO, EDIT, ARP or SEQ hold outside the startup logo.",
    "short_label": "HOLD BAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1561-1577",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1561-L1577"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "fm_tune",
    "gesture": "turn",
    "action": "Sends detune edits at operator-relative index 20 to the engine.",
    "short_label": "DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "162",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L162"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_rates",
    "gesture": "turn",
    "action": "Sends rate 1 edits at operator-relative index 0 to the engine.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "163",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L163"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_levels",
    "gesture": "turn",
    "action": "Sends level 1 edits at operator-relative index 4 to the engine.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "164",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L164"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_sensitivity",
    "gesture": "turn",
    "action": "Sends am sens edits at operator-relative index 14 to the engine.",
    "short_label": "AM SENS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "165",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L165"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_scaling",
    "gesture": "turn",
    "action": "Sends left depth edits at operator-relative index 9 to the engine.",
    "short_label": "LEFT DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "166",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L166"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_curves",
    "gesture": "turn",
    "action": "Sends left curve edits at operator-relative index 11 to the engine.",
    "short_label": "LEFT CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "167",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L167"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_rates",
    "gesture": "turn",
    "action": "Sends rate 1 edits at patch index 126 to the engine.",
    "short_label": "PITCH R1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_levels",
    "gesture": "turn",
    "action": "Sends level 1 edits at patch index 130 to the engine.",
    "short_label": "PITCH L1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "169",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L169"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_common",
    "gesture": "turn",
    "action": "Sends algorithm edits at patch index 134 to the engine.",
    "short_label": "ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "170",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "turn",
    "action": "Sends the attack overlay delta to the engine.",
    "short_label": "ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1479-1483",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1479-L1483"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2357",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2357"
     }
    ]
   },
   {
    "mode": "fm_lfo_main",
    "gesture": "turn",
    "action": "Sends the wave delta at patch index 142 to the engine.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "171",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L171"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_lfo_mod",
    "gesture": "turn",
    "action": "Sends the delay delta at patch index 138 to the engine.",
    "short_label": "DELAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L172"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "turn",
    "action": "Sends the track LFO rate delta to the engine.",
    "short_label": "LFO RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "838-848",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L838-L848"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2274-2276",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2274-L2276"
     }
    ]
   },
   {
    "mode": "bass_filter",
    "gesture": "turn",
    "action": "Sends the cutoff delta at 303 parameter index 0 to the engine.",
    "short_label": "CUTOFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_osc",
    "gesture": "turn",
    "action": "Sends the accent delta at 303 parameter index 4 to the engine.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_drive",
    "gesture": "turn",
    "action": "Sends the drive delta at 303 parameter index 8 to the engine.",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "env_303",
    "gesture": "turn",
    "action": "Sends the delta for 303 parameter index 2 to the engine when its descriptor exists.",
    "short_label": "ENV AMOUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_psg",
    "gesture": "turn",
    "action": "Adjusts the PSG Release value named by the guide, forwarding parameter index 3 when its native descriptor exists.",
    "short_label": "RELEASE",
    "evidence": "vendor-doc",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     },
     {
      "kind": "doc",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "sdk/Update.html.in",
      "lines": "208-212",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L208-L212"
     }
    ]
   },
   {
    "mode": "env_pluck",
    "gesture": "turn",
    "action": "Sends the delta for PLUCK parameter index 0 to the engine when its descriptor exists.",
    "short_label": "PARAMETER 0",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_sample",
    "gesture": "turn",
    "action": "Sends the delta for SAMPLE parameter index 2 to the engine when its descriptor exists.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/sampledrum.h",
      "lines": "14-21",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/sampledrum.h#L14-L21"
     }
    ]
   },
   {
    "mode": "env_808",
    "gesture": "turn",
    "action": "Sends the delta to the selected drum descriptor named Decay, if the engine supplies one.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "Sends a delta for descriptor 0 of the selected source or pad to the engine.",
    "short_label": "PARAMETER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "Sends a delta for parameter page × 4 + 0 of the selected source or pad when its engine descriptor exists.",
    "short_label": "PAGE VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "Sends the rev send delta to the corresponding engine control.",
    "short_label": "REV SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "Sends the reverb time delta to the corresponding engine control.",
    "short_label": "REVERB TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "turn",
    "action": "Sends the arp rate delta to the engine.",
    "short_label": "ARP RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "turn",
    "action": "Sends the arp swing delta to the engine.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "turn",
    "action": "Sends a level delta for track 1 or 5, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "turn",
    "action": "Sends a level delta for track 1 or 5, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "turn",
    "action": "Chooses USER or FACTORY and immediately loads the selected slot when the bank changes.",
    "short_label": "BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2020-2039",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2020-L2039"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Changes the selected DX7 patch-name character in RAM.",
    "short_label": "NAME LETTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2149-2155",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2149-L2155"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "248-258",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L248-L258"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Moves among twelve working project-name characters.",
    "short_label": "NAME CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2120-2125",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2120-L2125"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Positive turns enable the radio master and negative turns disable it.",
    "short_label": "RADIO POWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2160-2172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2160-L2172"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "Sends the algorithm delta at patch index 134 to the engine.",
    "short_label": "ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2258-2261",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2258-L2261"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1336-1338",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1336-L1338"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Sends the selected track’s level delta to the engine.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2395-2396",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2395-L2396"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Sends the selected track’s level delta to the engine.",
    "short_label": "TRACK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2395-2396",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2395-L2396"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Sends the selected step’s velocity edit to the engine, reporting unavailable or full-table results.",
    "short_label": "VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "Sends the selected step’s tie edit to the engine, reporting unavailable or full-table results.",
    "short_label": "TIE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Sends the sequence swing delta to the engine.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2232-2234",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2232-L2234"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1443-1450",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1443-L1450"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Positive turns select MIDI clock and negative turns select internal clock.",
    "short_label": "CLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2235-2237",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2235-L2237"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "While GLO’s mixer layer is active, sends the level delta for bank position 1.",
    "short_label": "MIX LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "fm_tune",
    "gesture": "turn",
    "action": "Sends coarse edits at operator-relative index 18 to the engine.",
    "short_label": "COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "162",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L162"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_rates",
    "gesture": "turn",
    "action": "Sends rate 2 edits at operator-relative index 1 to the engine.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "163",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L163"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_levels",
    "gesture": "turn",
    "action": "Sends level 2 edits at operator-relative index 5 to the engine.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "164",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L164"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_sensitivity",
    "gesture": "turn",
    "action": "Sends velocity edits at operator-relative index 15 to the engine.",
    "short_label": "VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "165",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L165"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_scaling",
    "gesture": "turn",
    "action": "Sends right depth edits at operator-relative index 10 to the engine.",
    "short_label": "RIGHT DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "166",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L166"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_curves",
    "gesture": "turn",
    "action": "Sends right curve edits at operator-relative index 12 to the engine.",
    "short_label": "RIGHT CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "167",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L167"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_rates",
    "gesture": "turn",
    "action": "Sends rate 2 edits at patch index 127 to the engine.",
    "short_label": "PITCH R2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_levels",
    "gesture": "turn",
    "action": "Sends level 2 edits at patch index 131 to the engine.",
    "short_label": "PITCH L2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "169",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L169"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_common",
    "gesture": "turn",
    "action": "Sends feedback edits at patch index 135 to the engine.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "170",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "turn",
    "action": "Sends the decay overlay delta to the engine.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1479-1483",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1479-L1483"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2357",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2357"
     }
    ]
   },
   {
    "mode": "fm_lfo_main",
    "gesture": "turn",
    "action": "Sends the speed delta at patch index 137 to the engine.",
    "short_label": "SPEED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "171",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L171"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_lfo_mod",
    "gesture": "turn",
    "action": "Sends the pitch sens delta at patch index 143 to the engine.",
    "short_label": "PITCH SENS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L172"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "turn",
    "action": "Sends the track LFO depth delta to the engine.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "838-848",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L838-L848"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2274-2276",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2274-L2276"
     }
    ]
   },
   {
    "mode": "bass_filter",
    "gesture": "turn",
    "action": "Sends the resonance delta at 303 parameter index 1 to the engine.",
    "short_label": "RESONANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_osc",
    "gesture": "turn",
    "action": "Sends the wave delta at 303 parameter index 5 to the engine.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_drive",
    "gesture": "turn",
    "action": "Sends the drive type delta at 303 parameter index 9 to the engine.",
    "short_label": "DRIVE TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "env_303",
    "gesture": "turn",
    "action": "Sends the delta for 303 parameter index 3 to the engine when its descriptor exists.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_psg",
    "gesture": "turn",
    "action": "Leaves this knob unused because no parameter descriptor is assigned.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_pluck",
    "gesture": "turn",
    "action": "Sends the delta for PLUCK parameter index 3 to the engine when its descriptor exists.",
    "short_label": "PARAMETER 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_sample",
    "gesture": "turn",
    "action": "Sends the delta for SAMPLE parameter index 3 to the engine when its descriptor exists.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/sampledrum.h",
      "lines": "14-21",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/sampledrum.h#L14-L21"
     }
    ]
   },
   {
    "mode": "env_808",
    "gesture": "turn",
    "action": "Sends the delta to the selected drum descriptor named Attack, if the engine supplies one.",
    "short_label": "ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "Sends a delta for descriptor 1 of the selected source or pad to the engine.",
    "short_label": "PARAMETER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "Sends a delta for parameter page × 4 + 1 of the selected source or pad when its engine descriptor exists.",
    "short_label": "PAGE VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "Sends the delay send delta to the corresponding engine control.",
    "short_label": "DELAY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "Sends the delay time delta to the corresponding engine control.",
    "short_label": "DELAY TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "turn",
    "action": "Sends the arp direction delta to the engine.",
    "short_label": "DIRECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "turn",
    "action": "Sends the arp hold delta to the engine.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "turn",
    "action": "Sends a level delta for track 2 or 6, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "turn",
    "action": "Sends a level delta for track 2 or 6, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "source",
    "gesture": "turn",
    "action": "Cycles through the six source choices without applying the change.",
    "short_label": "SOURCE TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "173",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L173"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2042-2046",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2042-L2046"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Opens Source with the next type previewed and releases tracked notes.",
    "short_label": "SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2205-2219",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2205-L2219"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "turn",
    "action": "Moves the action target by individual cells and disarms confirmation.",
    "short_label": "TARGET STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2056-2063",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2056-L2063"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Changes the selected working project-name character in RAM and clears overwrite confirmation.",
    "short_label": "NAME LETTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2120-2125",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2120-L2125"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "248-258",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L248-L258"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Positive turns enable Bluetooth audio and negative turns disable it.",
    "short_label": "BT AUDIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2160-2172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2160-L2172"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "Sends the feedback delta at patch index 135 to the engine.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2258-2261",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2258-L2261"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1336-1338",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1336-L1338"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Moves the cursor within the sequence, disables follow and ends recording when it moves.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2224-2229",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2224-L2229"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Sends the selected step’s gate edit to the engine, reporting unavailable or full-table results.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "Sends the selected step’s lock target edit to the engine, reporting unavailable or full-table results.",
    "short_label": "LOCK TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Sends the sequence metronome delta to the engine.",
    "short_label": "METRONOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2232-2234",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2232-L2234"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1443-1450",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1443-L1450"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Sends a tempo delta to the engine even while the display shows MIDI tempo.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2238",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2238"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1451-1461",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1451-L1461"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "While GLO’s mixer layer is active, sends the level delta for bank position 2.",
    "short_label": "MIX LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "fm_tune",
    "gesture": "turn",
    "action": "Sends fine edits at operator-relative index 19 to the engine.",
    "short_label": "FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "162",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L162"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_rates",
    "gesture": "turn",
    "action": "Sends rate 3 edits at operator-relative index 2 to the engine.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "163",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L163"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_levels",
    "gesture": "turn",
    "action": "Sends level 3 edits at operator-relative index 6 to the engine.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "164",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L164"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_sensitivity",
    "gesture": "turn",
    "action": "Sends osc mode edits at operator-relative index 17 to the engine.",
    "short_label": "OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "165",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L165"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_scaling",
    "gesture": "turn",
    "action": "Sends breakpoint edits at operator-relative index 8 to the engine.",
    "short_label": "BREAKPOINT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "166",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L166"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_curves",
    "gesture": "turn",
    "action": "Sends rate scale edits at operator-relative index 13 to the engine.",
    "short_label": "RATE SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "167",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L167"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_rates",
    "gesture": "turn",
    "action": "Sends rate 3 edits at patch index 128 to the engine.",
    "short_label": "PITCH R3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_levels",
    "gesture": "turn",
    "action": "Sends level 3 edits at patch index 132 to the engine.",
    "short_label": "PITCH L3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "169",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L169"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_common",
    "gesture": "turn",
    "action": "Sends osc sync edits at patch index 136 to the engine.",
    "short_label": "OSC SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "170",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "turn",
    "action": "Sends the sustain overlay delta to the engine.",
    "short_label": "SUSTAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1479-1483",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1479-L1483"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2357",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2357"
     }
    ]
   },
   {
    "mode": "fm_lfo_main",
    "gesture": "turn",
    "action": "Sends the pitch depth delta at patch index 139 to the engine.",
    "short_label": "PITCH DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "171",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L171"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_lfo_mod",
    "gesture": "turn",
    "action": "Sends the lfo sync delta at patch index 141 to the engine.",
    "short_label": "LFO SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L172"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "turn",
    "action": "Sends the track LFO target delta to the engine.",
    "short_label": "TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "838-848",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L838-L848"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2274-2276",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2274-L2276"
     }
    ]
   },
   {
    "mode": "bass_filter",
    "gesture": "turn",
    "action": "Sends the env amount delta at 303 parameter index 2 to the engine.",
    "short_label": "ENV AMOUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_osc",
    "gesture": "turn",
    "action": "Sends the tune delta at 303 parameter index 6 to the engine.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_drive",
    "gesture": "turn",
    "action": "Sends the slide delta at 303 parameter index 10 to the engine.",
    "short_label": "SLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "env_303",
    "gesture": "turn",
    "action": "Sends the delta for 303 parameter index 11 to the engine when its descriptor exists.",
    "short_label": "ACCENT DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_psg",
    "gesture": "turn",
    "action": "Leaves this knob unused because no parameter descriptor is assigned.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_pluck",
    "gesture": "turn",
    "action": "Sends the delta for PLUCK parameter index 1 to the engine when its descriptor exists.",
    "short_label": "PARAMETER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_sample",
    "gesture": "turn",
    "action": "Leaves this knob unused because no parameter descriptor is assigned.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/sampledrum.h",
      "lines": "14-21",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/sampledrum.h#L14-L21"
     }
    ]
   },
   {
    "mode": "env_808",
    "gesture": "turn",
    "action": "Sends the delta to the selected drum descriptor named Tone, if the engine supplies one.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "Sends a delta for descriptor 2 of the selected source or pad to the engine.",
    "short_label": "PARAMETER 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "Sends a delta for parameter page × 4 + 2 of the selected source or pad when its engine descriptor exists.",
    "short_label": "PAGE VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "Sends the track level delta to the corresponding engine control.",
    "short_label": "TRACK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "Sends the feedback delta to the corresponding engine control.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "turn",
    "action": "Sends the arp range delta on melodic tracks and shows an unavailable notice on drum tracks.",
    "short_label": "RANGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "turn",
    "action": "Has no assigned action on this arp page.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "turn",
    "action": "Sends a level delta for track 3 or 7, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "turn",
    "action": "Sends a level delta for track 3 or 7, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Selects DEVICE or HOST without offering a MIDI-off position.",
    "short_label": "MIDI ROLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2167-2172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2167-L2172"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "sdk/include/fm1.h",
      "lines": "50",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/include/fm1.h#L50"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "Sends the transpose delta at patch index 144 to the engine.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2258-2261",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2258-L2261"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1336-1338",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1336-L1338"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Moves the cursor, disables follow and seeks the record cursor when recording.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2363-2369",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2363-L2369"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Selects a drum or sample pad, or edits an existing melodic cell’s pitch while retaining its velocity.",
    "short_label": "NOTE / PAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2370-2392",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2370-L2392"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Sends the selected step’s probability edit to the engine, reporting unavailable or full-table results.",
    "short_label": "PROBABILITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "Sends the selected step’s lock value edit to the engine, reporting unavailable or full-table results.",
    "short_label": "LOCK VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Sends the sequence count-in delta to the engine.",
    "short_label": "COUNT-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2232-2234",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2232-L2234"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1443-1450",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1443-L1450"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Requests 16, 32, 48 or 64 steps for the selected track.",
    "short_label": "LOOP LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "624-630",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L624-L630"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2239",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2239"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "78-83",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L78-L83"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "While GLO’s mixer layer is active, sends the level delta for bank position 3.",
    "short_label": "MIX LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "fm_tune",
    "gesture": "turn",
    "action": "Sends output level edits at operator-relative index 16 to the engine.",
    "short_label": "OUTPUT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "162",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L162"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_rates",
    "gesture": "turn",
    "action": "Sends rate 4 edits at operator-relative index 3 to the engine.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "163",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L163"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_levels",
    "gesture": "turn",
    "action": "Sends level 4 edits at operator-relative index 7 to the engine.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "164",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L164"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_sensitivity",
    "gesture": "turn",
    "action": "Passes index 255 to the patch-edit API for this blank knob position; its native response is unverified.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "165",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L165"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_scaling",
    "gesture": "turn",
    "action": "Passes index 255 to the patch-edit API for this blank knob position; its native response is unverified.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "166",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L166"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_curves",
    "gesture": "turn",
    "action": "Passes index 255 to the patch-edit API for this blank knob position; its native response is unverified.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "167",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L167"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_rates",
    "gesture": "turn",
    "action": "Sends rate 4 edits at patch index 129 to the engine.",
    "short_label": "PITCH R4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_pitch_levels",
    "gesture": "turn",
    "action": "Sends level 4 edits at patch index 133 to the engine.",
    "short_label": "PITCH L4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "169",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L169"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_common",
    "gesture": "turn",
    "action": "Sends transpose edits at patch index 144 to the engine.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "170",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L170"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "689-695",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L689-L695"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "turn",
    "action": "Sends the release overlay delta to the engine.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1479-1483",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1479-L1483"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2357",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2357"
     }
    ]
   },
   {
    "mode": "fm_lfo_main",
    "gesture": "turn",
    "action": "Sends the amp depth delta at patch index 140 to the engine.",
    "short_label": "AMP DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "171",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L171"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "fm_lfo_mod",
    "gesture": "turn",
    "action": "Sends the osc sync delta at patch index 136 to the engine.",
    "short_label": "OSC SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "172",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L172"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2353-2360",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2353-L2360"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "turn",
    "action": "Sends the track LFO wave delta to the engine.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "838-848",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L838-L848"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2274-2276",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2274-L2276"
     }
    ]
   },
   {
    "mode": "bass_filter",
    "gesture": "turn",
    "action": "Sends the decay delta at 303 parameter index 3 to the engine.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_osc",
    "gesture": "turn",
    "action": "Sends the volume delta at 303 parameter index 7 to the engine.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "bass_drive",
    "gesture": "turn",
    "action": "Sends the accent decay delta at 303 parameter index 11 to the engine.",
    "short_label": "ACCENT DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/bass303.h",
      "lines": "7-14",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/bass303.h#L7-L14"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2314",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2314"
     }
    ]
   },
   {
    "mode": "env_303",
    "gesture": "turn",
    "action": "Sends the delta for 303 parameter index 0 to the engine when its descriptor exists.",
    "short_label": "CUTOFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_psg",
    "gesture": "turn",
    "action": "Leaves this knob unused because no parameter descriptor is assigned.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_pluck",
    "gesture": "turn",
    "action": "Leaves this knob unused because no parameter descriptor is assigned.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "env_sample",
    "gesture": "turn",
    "action": "Leaves this knob unused because no parameter descriptor is assigned.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/synth/sampledrum.h",
      "lines": "14-21",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/sampledrum.h#L14-L21"
     }
    ]
   },
   {
    "mode": "env_808",
    "gesture": "turn",
    "action": "Sends the delta to the selected drum descriptor named Tune, if the engine supplies one.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "804-820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L804-L820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2304-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2304-L2313"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "Sends a delta for descriptor 3 of the selected source or pad to the engine.",
    "short_label": "PARAMETER 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "Sends a delta for parameter page × 4 + 3 of the selected source or pad when its engine descriptor exists.",
    "short_label": "PAGE VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "807",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L807"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2313",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2313"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "Sends the all return delta to the corresponding engine control.",
    "short_label": "ALL RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "Sends the return delta to the corresponding engine control.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1166-1168",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1166-L1168"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2273",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2273"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "turn",
    "action": "Sends the arp gate delta on melodic tracks and shows an unavailable notice on drum tracks.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "turn",
    "action": "Has no assigned action on this arp page.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1308-1322",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1308-L1322"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "turn",
    "action": "Sends a level delta for track 4 or 8, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "turn",
    "action": "Sends a level delta for track 4 or 8, according to the selected bank.",
    "short_label": "BANK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1998-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1998-L2001"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Positive turns select MIDI clock and negative turns select internal clock.",
    "short_label": "CLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2173-2174",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2173-L2174"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "Sends the selected track’s level delta to the engine.",
    "short_label": "TRACK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2258-2261",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2258-L2261"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Sends the tempo delta to the engine and shows an external-clock notice in MIDI mode.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2397-2402",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2397-L2402"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Sends the tempo delta to the engine and shows an external-clock notice in MIDI mode.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2397-2402",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2397-L2402"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Sends the selected step’s chord edit to the engine, reporting unavailable or full-table results.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "595-620",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L595-L620"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2231"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "On melodic tracks sends a clamped 0–127 note edit retaining velocity, with no result notice, and does nothing on drum tracks.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "610-621",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L610-L621"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Requests 16, 32, 48 or 64 steps for the selected track.",
    "short_label": "LOOP LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "624-630",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L624-L630"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2232-2234",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2232-L2234"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "78-83",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L78-L83"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Has no assigned action on SEQ Sync / Loop.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2235-2240",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2235-L2240"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "While GLO’s mixer layer is active, sends the level delta for bank position 4.",
    "short_label": "MIX LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Returns to the track overview unless a confirmation is being cancelled.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1925-1930",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1925-L1930"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "press",
    "action": "Opens the whole-project browser.",
    "short_label": "PROJECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1928-1930",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1928-L1930"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Cancels the pending confirmation when a destructive action is armed; otherwise returns to the overview.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1925-1930",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1925-L1930"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "action": "Cancels the pending confirmation when pair clearing is armed; otherwise returns to the overview.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1925-1930",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1925-L1930"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_play_stop",
    "action": "Posts reset, releases tracked notes, disables recording and returns to the overview.",
    "short_label": "RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1854-1864",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1854-L1864"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Requests the engine’s undo/redo and returns to the remembered music page.",
    "short_label": "UNDO / REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1870-1876",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1870-L1876"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Opens Bluetooth settings.",
    "short_label": "BLUETOOTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1878-1881",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1878-L1881"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens track effects or returns to the page remembered before the effects, ENV or LFO subpages.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "333-339",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L333-L339"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1933-1935",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1933-L1935"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the source envelope page or returns to the page remembered before the effects, ENV or LFO subpages.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "333-339",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L333-L339"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1953-1955",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1953-L1955"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the source LFO page or returns to the page remembered before the effects, ENV or LFO subpages.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "333-339",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L333-L339"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1953-1956",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1953-L1956"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "On DX7 opens operator scaling or curves; on non-FM sources opens advanced tone page 2 for 303 or page 1 otherwise.",
    "short_label": "EDIT PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1936-1945",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1936-L1945"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "Enters advanced tone editing at page 2 for 303 or page 1 for other non-FM sources.",
    "short_label": "MORE TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1942-1945",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1942-L1945"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "press",
    "action": "Reselects advanced tone editing at page 2 for 303 or page 1 for other non-FM sources.",
    "short_label": "MORE TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1942-1945",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1942-L1945"
     }
    ]
   },
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "For non-FM sources opens advanced tone editing at page 2 for 303 or page 1 otherwise.",
    "short_label": "MORE TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1942-1945",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1942-L1945"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Toggles quick source editing with the remembered music page, resetting the advanced flag.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1946-1952",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1946-L1952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After 600 ms opens full DX7 editing or advanced tone editing unless SEQ, REC or HOME is held.",
    "short_label": "FULL EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1959-1963",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1959-L1963"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Opens the edit-actions menu and releases tracked notes.",
    "short_label": "ACTIONS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1892-1897",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1892-L1897"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "On a DX7 track opens patch-name editing and restores the prior recording state.",
    "short_label": "PATCH NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1915-1920",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1915-L1920"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens SEQ Basic with playhead following enabled.",
    "short_label": "SEQUENCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1931-1932",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1931-L1932"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After 600 ms opens Actions from the step page entered on press.",
    "short_label": "ACTIONS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1823-1826",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1823-L1826"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1899-1901",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1899-L1901"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Opens the edit-actions menu and releases tracked notes.",
    "short_label": "ACTIONS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1892-1897",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1892-L1897"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Toggles the selected track’s arp on a release before the 600 ms settings hold, releasing tracked notes.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1817-1820",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1817-L1820"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1903-1905",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1903-L1905"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1965-1970",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1965-L1970"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After 600 ms opens arp settings without toggling the arp.",
    "short_label": "ARP SETTINGS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1903-1905",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1903-L1905"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Begins the mixer hold gesture and blocks keys already down.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-1994",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L1994"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Shows the temporary mixer after 600 ms or after a key or encoder is used while GLO is held.",
    "short_label": "HELD MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1361",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1361"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "A release within 600 ms with no other use toggles the persistent mixer, while a used hold closes its temporary layer.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1909-1914",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1909-L1914"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Opens Bluetooth settings.",
    "short_label": "BLUETOOTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1878-1881",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1878-L1881"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Toggles the record request and, when needed, moves navigation or detailed-step pages to SEQ Basic.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1972-1980",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1972-L1980"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2427-2429",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2427-L2429"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "release",
    "action": "Toggles recording only when released within 600 ms without using SELECT or another button.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1831-1851",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1831-L1851"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "hold",
    "action": "Defers the record toggle so SELECT can seek after a 600 ms hold.",
    "short_label": "RECORD SEEK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1831-1851",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1831-L1851"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DX7 track opens patch-name editing and restores the prior recording state.",
    "short_label": "PATCH NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1915-1920",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1915-L1920"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Posts Stop while playing, otherwise Continue or Start when recording has count-in enabled at rewind.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2430-2434",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2430-L2434"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Posts reset, releases tracked notes, disables recording and returns to the overview.",
    "short_label": "RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1854-1864",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1854-L1864"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads the selected whole project and posts Start on success.",
    "short_label": "LOAD + RUN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2018-2039",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2018-L2039"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1686-1705",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1686-L1705"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Requests the engine’s undo/redo and returns to the remembered music page.",
    "short_label": "UNDO / REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1870-1876",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1870-L1876"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens project saving on the last USER slot loaded or saved, even after a factory load or file import.",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1984-1990",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1984-L1990"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/project.c",
      "lines": "259-287",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L259-L287"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/project.c",
      "lines": "293-327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L293-L327"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Writes the chosen USER slot without asking if it is the remembered slot, and asks again only for a different valid occupied slot.",
    "short_label": "WRITE SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2127-2138",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2127-L2138"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1984-1989",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1984-L1989"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/project.c",
      "lines": "259-287",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L259-L287"
     }
    ]
   },
   {
    "mode": "source",
    "gesture": "press",
    "action": "Requests the previewed source type and returns to the music page on success.",
    "short_label": "APPLY SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2042-2054",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2042-L2054"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "28-31",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L28-L31"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "action": "Opens the host device list or arms pair clearing, with another SAVE required to forget BLE pairs.",
    "short_label": "RADIO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2175-2183",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2175-L2183"
     }
    ]
   },
   {
    "mode": "midi_host",
    "gesture": "press",
    "action": "Executes the selected connect, scan, disconnect or return-to-settings command.",
    "short_label": "HOST ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2185-2196",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2185-L2196"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Executes the selected action with a second press for paste-track, clear, repeat or paste-timbre, whose source-type change can clear incompatible steps according to the guide.",
    "short_label": "EXECUTE",
    "evidence": "vendor-doc",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2073-2100",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2100"
     },
     {
      "kind": "doc",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "sdk/Update.html.in",
      "lines": "625-629",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L625-L629"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "28-31",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L28-L31"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Moves the keyboard one octave lower within the −2 to +2 range outside SEQ and Actions.",
    "short_label": "OCT-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1982-1983",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1982-L1983"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent lower sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent lower sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent lower sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent lower sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent lower sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Moves the target sixteen cells lower within the track length and cancels action confirmation.",
    "short_label": "16 STEPS -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2056-2063",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2056-L2063"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Moves the keyboard one octave higher within the −2 to +2 range outside SEQ and Actions.",
    "short_label": "OCT+",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1982-1983",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1982-L1983"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent higher sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent higher sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent higher sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent higher sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "Moves the cursor to the adjacent higher sixteen-step page within the track length and disables follow.",
    "short_label": "STEP PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "280-286",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L280-L286"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2221-2230",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2221-L2230"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Moves the target sixteen cells higher within the track length and cancels action confirmation.",
    "short_label": "16 STEPS +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2056-2063",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2056-L2063"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Selects track 1–8, retaining the remembered pad and adapting quick editing to its source.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2200-2203",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2200-L2203"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "turn",
    "action": "Selects track 1–8 and the corresponding four-track volume bank.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "turn",
    "action": "Selects track 1–8 and the corresponding four-track volume bank.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1780-1796",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1780-L1796"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "turn",
    "action": "Changes the selected whole project and loads it immediately, preserving whether playback was running.",
    "short_label": "LOAD PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2020-2039",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2020-L2039"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1686-1705",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1686-L1705"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Chooses USER 1–16 and clears confirmation, with no extra question when saving back to the remembered USER slot.",
    "short_label": "SAVE SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2113-2118",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2113-L2118"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1984-1989",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1984-L1989"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2127-2136",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2127-L2136"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn_while_holding:button_rec",
    "action": "After REC has been held for 600 ms, seeks within the track without toggling recording; earlier turns are consumed.",
    "short_label": "SEEK RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1831-1851",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1831-L1851"
     }
    ]
   },
   {
    "mode": "source",
    "gesture": "turn",
    "action": "Cycles through the six source choices without applying the change.",
    "short_label": "SOURCE TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "173",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L173"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2042-2046",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2042-L2046"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "turn",
    "action": "Selects an edit action and disarms its confirmation.",
    "short_label": "ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2069-2072",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2069-L2072"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Moves among ten DX7 patch-name characters.",
    "short_label": "NAME CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2149-2155",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2149-L2155"
     }
    ]
   },
   {
    "mode": "midi_host",
    "gesture": "turn",
    "action": "Chooses a discovered BLE MIDI device.",
    "short_label": "BLE DEVICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2185-2188",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2185-L2188"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "turn",
    "action": "Moves one page by turn direction within the selected operator, pitch or common context.",
    "short_label": "EDIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2340-2347",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2340-L2347"
     }
    ]
   },
   {
    "mode": "fm_lfo",
    "gesture": "turn",
    "action": "Chooses the main or modulation group of DX7 LFO parameters.",
    "short_label": "LFO PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2348-2351",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2348-L2351"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "Moves one group of four parameters by turn direction within the engine’s descriptor count.",
    "short_label": "TONE PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2299-2303",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2299-L2303"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "While GLO’s mixer layer is active, selects the track and four-track level bank.",
    "short_label": "MIX TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2001",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2001"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "turn",
    "action": "Changes the selected whole project and loads it immediately, preserving whether playback was running.",
    "short_label": "LOAD PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2020-2039",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2020-L2039"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1686-1705",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1686-L1705"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Chooses USER 1–16 and clears confirmation, with no extra question when saving back to the remembered USER slot.",
    "short_label": "SAVE SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2113-2118",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2113-L2118"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1984-1989",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1984-L1989"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2127-2136",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2127-L2136"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Immediately loads another whole project from the last browser bank; before the first load either direction selects a bank endpoint.",
    "short_label": "PROJECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2007-2015",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2007-L2015"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1748-1750",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1748-L1750"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1686-1705",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1686-L1705"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_home",
    "action": "While HOME is held, opens Source using the current type plus the turn delta.",
    "short_label": "SOURCE MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1883-1890",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1883-L1890"
     }
    ]
   },
   {
    "mode": "source",
    "gesture": "turn",
    "action": "Cycles through the six source choices without applying the change.",
    "short_label": "SOURCE TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "173",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L173"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2042-2046",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2042-L2046"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "turn",
    "action": "Moves the action target by individual cells and disarms confirmation.",
    "short_label": "TARGET STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2056-2063",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2056-L2063"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Chooses the host-list or forget-pairs action.",
    "short_label": "RADIO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2157-2159",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2157-L2159"
     }
    ]
   },
   {
    "mode": "midi_host",
    "gesture": "turn",
    "action": "Chooses connect, scan, disconnect or settings.",
    "short_label": "HOST ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2157-2159",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2157-L2159"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2189-2196",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2189-L2196"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "turn",
    "action": "Positive turns request the DX7 amplitude overlay on and negative turns request it off.",
    "short_label": "ADSR ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2406",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2406"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "For drum or sampler sources selects a part, including 808 kit controls only outside ENV.",
    "short_label": "DRUM / PAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2282-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2282-L2297"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "For drum or sampler sources selects a part, including 808 kit controls only outside ENV.",
    "short_label": "DRUM / PAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2282-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2282-L2297"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "turn",
    "action": "For drum or sampler sources selects a part, including 808 kit controls only outside ENV.",
    "short_label": "DRUM / PAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2282-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2282-L2297"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "Sends a program-step delta for the selected DX7 track.",
    "short_label": "FM VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2407-2408",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2407-L2408"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "turn",
    "action": "Sends a program-step delta for the selected DX7 track.",
    "short_label": "FM VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2407-2408",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2407-L2408"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "For melodic non-FM sources sends a program-step delta for the selected track.",
    "short_label": "TONE VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2407-2408",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2407-L2408"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "For melodic non-FM sources sends a program-step delta for the selected track.",
    "short_label": "TONE VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2407-2408",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2407-L2408"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "Selects track sends or shared effects.",
    "short_label": "FX PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2264",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2264"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "Selects track sends or shared effects.",
    "short_label": "FX PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2262-2264",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2262-L2264"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Moves the cursor within the sequence, disables follow and ends recording when it moves.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2224-2229",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2224-L2229"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Moves the cursor within the sequence, disables follow and ends recording when it moves.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2224-2229",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2224-L2229"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Moves the cursor within the sequence, disables follow and ends recording when it moves.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2224-2229",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2224-L2229"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "Moves the cursor within the sequence, disables follow and ends recording when it moves.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2224-2229",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2224-L2229"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Moves the cursor within the sequence, disables follow and ends recording when it moves.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2224-2229",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2224-L2229"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "Has no assigned turn action in GLO’s mixer layer.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Has no assigned turn action when none of the listed page or held-state handlers applies.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2405-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2405-L2413"
     }
    ]
   },
   {
    "mode": "source",
    "gesture": "turn",
    "action": "Cycles through the six source choices without applying the change.",
    "short_label": "SOURCE TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "173",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L173"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2042-2046",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2042-L2046"
     }
    ]
   },
   {
    "mode": "overview",
    "gesture": "turn",
    "action": "Opens Source with the next type previewed and releases tracked notes.",
    "short_label": "SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2205-2219",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2205-L2219"
     }
    ]
   },
   {
    "mode": "fm_quick",
    "gesture": "turn",
    "action": "On DX7 sends a delta for patch algorithm index 134.",
    "short_label": "FM ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "turn",
    "action": "On DX7 sends a delta for patch algorithm index 134.",
    "short_label": "FM ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     }
    ]
   },
   {
    "mode": "fm_env_dx7",
    "gesture": "turn",
    "action": "On DX7 sends a delta for patch algorithm index 134.",
    "short_label": "FM ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     }
    ]
   },
   {
    "mode": "fm_lfo",
    "gesture": "turn",
    "action": "On DX7 sends a delta for patch algorithm index 134.",
    "short_label": "FM ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "On DX7 sends a delta for patch algorithm index 134.",
    "short_label": "FM ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "On DX7 sends a delta for patch algorithm index 134.",
    "short_label": "FM ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "turn",
    "action": "On non-FM sources sends the delta through the engine’s cutoff-control argument.",
    "short_label": "TONE DELTA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "90",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L90"
     }
    ]
   },
   {
    "mode": "tone_advanced",
    "gesture": "turn",
    "action": "On non-FM sources sends the delta through the engine’s cutoff-control argument.",
    "short_label": "TONE DELTA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "90",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L90"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "turn",
    "action": "On non-FM sources sends the delta through the engine’s cutoff-control argument.",
    "short_label": "TONE DELTA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "90",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L90"
     }
    ]
   },
   {
    "mode": "track_lfo",
    "gesture": "turn",
    "action": "On non-FM sources sends the delta through the engine’s cutoff-control argument.",
    "short_label": "TONE DELTA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "90",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L90"
     }
    ]
   },
   {
    "mode": "fx_track",
    "gesture": "turn",
    "action": "On non-FM sources sends the delta through the engine’s cutoff-control argument.",
    "short_label": "TONE DELTA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "90",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L90"
     }
    ]
   },
   {
    "mode": "fx_shared",
    "gesture": "turn",
    "action": "On non-FM sources sends the delta through the engine’s cutoff-control argument.",
    "short_label": "TONE DELTA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2409-2413",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2409-L2413"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "90",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L90"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "turn",
    "action": "Selects one of the five SEQ parameter pages and pins the step view when the page changes.",
    "short_label": "SEQ PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2222-2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2231"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "turn",
    "action": "Selects one of the five SEQ parameter pages and pins the step view when the page changes.",
    "short_label": "SEQ PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2222-2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2231"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "turn",
    "action": "Selects one of the five SEQ parameter pages and pins the step view when the page changes.",
    "short_label": "SEQ PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2222-2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2231"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "turn",
    "action": "Selects one of the five SEQ parameter pages and pins the step view when the page changes.",
    "short_label": "SEQ PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2222-2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2231"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "turn",
    "action": "Selects one of the five SEQ parameter pages and pins the step view when the page changes.",
    "short_label": "SEQ PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2222-2231",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2222-L2231"
     }
    ]
   },
   {
    "mode": "arp_notes",
    "gesture": "turn",
    "action": "Selects the arp Notes or Swing / Hold page.",
    "short_label": "ARP PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     }
    ]
   },
   {
    "mode": "arp_hold",
    "gesture": "turn",
    "action": "Selects the arp Notes or Swing / Hold page.",
    "short_label": "ARP PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2242-2249",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2242-L2249"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "Has no assigned turn action in GLO’s mixer layer.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1995-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Passes the master ADC reading to the engine and displays its output level; this control is excluded from project storage.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2492-2507",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2492-L2507"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/instrument.h",
      "lines": "91-94",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L91-L94"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 1 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 1 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 1 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 1 of the visible page and stops following playback.",
    "short_label": "CELL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 1 of the visible page and stops following playback.",
    "short_label": "CELL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 1.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 1.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 1 in the held mixer layer.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 1 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 1 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects OP 1 for DX7 parameter editing without posting a note.",
    "short_label": "OP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "long_press",
    "action": "After 500 ms, requests toggling operator 1 on or off once per hold.",
    "short_label": "OP 1 ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2330-2337",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2330-L2337"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 2 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 2 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 2 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 2 of the visible page and stops following playback.",
    "short_label": "CELL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 2 of the visible page and stops following playback.",
    "short_label": "CELL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 2.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 2.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 2 in the held mixer layer.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 2 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 2 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects OP 2 for DX7 parameter editing without posting a note.",
    "short_label": "OP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "long_press",
    "action": "After 500 ms, requests toggling operator 2 on or off once per hold.",
    "short_label": "OP 2 ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2330-2337",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2330-L2337"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 3 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 3 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 3 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 3 of the visible page and stops following playback.",
    "short_label": "CELL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 3 of the visible page and stops following playback.",
    "short_label": "CELL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 3.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 3.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 3 in the held mixer layer.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 3 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 3 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects OP 3 for DX7 parameter editing without posting a note.",
    "short_label": "OP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "long_press",
    "action": "After 500 ms, requests toggling operator 3 on or off once per hold.",
    "short_label": "OP 3 ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2330-2337",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2330-L2337"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 4 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 4 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 4 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 4 of the visible page and stops following playback.",
    "short_label": "CELL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 4 of the visible page and stops following playback.",
    "short_label": "CELL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 4.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 4.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 4 in the held mixer layer.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 4 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 4 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 5 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 5 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 5 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 5 of the visible page and stops following playback.",
    "short_label": "CELL 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 5 of the visible page and stops following playback.",
    "short_label": "CELL 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 5.",
    "short_label": "MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 5.",
    "short_label": "MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 5 in the held mixer layer.",
    "short_label": "MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 5 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 5 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects OP 4 for DX7 parameter editing without posting a note.",
    "short_label": "OP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "long_press",
    "action": "After 500 ms, requests toggling operator 4 on or off once per hold.",
    "short_label": "OP 4 ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2330-2337",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2330-L2337"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 6 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 6 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 6 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 6 of the visible page and stops following playback.",
    "short_label": "CELL 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 6 of the visible page and stops following playback.",
    "short_label": "CELL 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 6.",
    "short_label": "MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 6.",
    "short_label": "MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 6 in the held mixer layer.",
    "short_label": "MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 6 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 6 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects OP 5 for DX7 parameter editing without posting a note.",
    "short_label": "OP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "long_press",
    "action": "After 500 ms, requests toggling operator 5 on or off once per hold.",
    "short_label": "OP 5 ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2330-2337",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2330-L2337"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 7 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 7 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 7 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 7 of the visible page and stops following playback.",
    "short_label": "CELL 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 7 of the visible page and stops following playback.",
    "short_label": "CELL 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 7.",
    "short_label": "MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 7.",
    "short_label": "MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 7 in the held mixer layer.",
    "short_label": "MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 7 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 7 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 8 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 8 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 8 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 8 of the visible page and stops following playback.",
    "short_label": "CELL 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 8 of the visible page and stops following playback.",
    "short_label": "CELL 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling mute for track 8.",
    "short_label": "MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling mute for track 8.",
    "short_label": "MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling mute for track 8 in the held mixer layer.",
    "short_label": "MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 8 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 8 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects OP 6 for DX7 parameter editing without posting a note.",
    "short_label": "OP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "long_press",
    "action": "After 500 ms, requests toggling operator 6 on or off once per hold.",
    "short_label": "OP 6 ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2330-2337",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2330-L2337"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 9 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 9 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 9 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 9 of the visible page and stops following playback.",
    "short_label": "CELL 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 9 of the visible page and stops following playback.",
    "short_label": "CELL 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 1.",
    "short_label": "SOLO 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 1.",
    "short_label": "SOLO 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 1 in the held mixer layer.",
    "short_label": "SOLO 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 9 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 9 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects PITCH for DX7 parameter editing without posting a note.",
    "short_label": "PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 10 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 10 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 10 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 10 of the visible page and stops following playback.",
    "short_label": "CELL 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 10 of the visible page and stops following playback.",
    "short_label": "CELL 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 2.",
    "short_label": "SOLO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 2.",
    "short_label": "SOLO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 2 in the held mixer layer.",
    "short_label": "SOLO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 10 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 10 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Selects GLOBAL for DX7 parameter editing without posting a note.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2327",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2327"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154-156",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154-L156"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 11 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 11 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 11 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 11 of the visible page and stops following playback.",
    "short_label": "CELL 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 11 of the visible page and stops following playback.",
    "short_label": "CELL 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 3.",
    "short_label": "SOLO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 3.",
    "short_label": "SOLO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 3 in the held mixer layer.",
    "short_label": "SOLO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 11 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 11 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 12 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 12 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 12 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 12 of the visible page and stops following playback.",
    "short_label": "CELL 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 12 of the visible page and stops following playback.",
    "short_label": "CELL 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 4.",
    "short_label": "SOLO 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 4.",
    "short_label": "SOLO 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 4 in the held mixer layer.",
    "short_label": "SOLO 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 12 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 12 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Requests monophonic DX7 operation without posting a note.",
    "short_label": "MONO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2323",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2323"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For BASS 303, requests monophonic operation without posting a note; other sources keep their normal key job.",
    "short_label": "MONO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2281",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2281"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2457-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2457-L2458"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 13 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 13 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 13 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 13 of the visible page and stops following playback.",
    "short_label": "CELL 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 13 of the visible page and stops following playback.",
    "short_label": "CELL 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 5.",
    "short_label": "SOLO 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 5.",
    "short_label": "SOLO 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 5 in the held mixer layer.",
    "short_label": "SOLO 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 13 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 13 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "press",
    "action": "Requests polyphonic DX7 operation without posting a note.",
    "short_label": "POLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2315-2323",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2315-L2323"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2456",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2456"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For BASS 303, requests polyphonic operation without posting a note; other sources keep their normal key job.",
    "short_label": "POLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2281",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2281"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2457-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2457-L2458"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 14 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 14 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 14 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 14 of the visible page and stops following playback.",
    "short_label": "CELL 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 14 of the visible page and stops following playback.",
    "short_label": "CELL 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 6.",
    "short_label": "SOLO 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 6.",
    "short_label": "SOLO 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 6 in the held mixer layer.",
    "short_label": "SOLO 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 14 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 14 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 15 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 15 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 15 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 15 of the visible page and stops following playback.",
    "short_label": "CELL 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 15 of the visible page and stops following playback.",
    "short_label": "CELL 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 7.",
    "short_label": "SOLO 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 7.",
    "short_label": "SOLO 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 7 in the held mixer layer.",
    "short_label": "SOLO 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 15 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 15 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "With recording off, has no key action and posts no keyboard note.",
    "short_label": "NO ACTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1999-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1999-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2028",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2028"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2479"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "keyboard",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "recording",
    "gesture": "press",
    "action": "Posts the engine-mapped note at velocity 100 for the selected track when this key has no editor job.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2451-2458",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2451-L2458"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Posts note-off for this key if the APP still tracks a note from it.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2475",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2475"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "In project, patch-name, Bluetooth, host and source menus, posts no keyboard note.",
    "short_label": "NO NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2479",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2479"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "press",
    "action": "With recording off, requests toggling step 16 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "press",
    "action": "With recording off, requests toggling step 16 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "press",
    "action": "With recording off, requests toggling step 16 of the visible page in the selected note or drum lane.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1708-1718",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1708-L1718"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "press",
    "action": "With recording off, selects step 16 of the visible page and stops following playback.",
    "short_label": "CELL 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "press",
    "action": "With recording off, selects step 16 of the visible page and stops following playback.",
    "short_label": "CELL 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2459-2467",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2459-L2467"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "198-201",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L198-L201"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "press",
    "action": "Requests toggling solo for track 8.",
    "short_label": "SOLO 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "press",
    "action": "Requests toggling solo for track 8.",
    "short_label": "SOLO 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Requests toggling solo for track 8 in the held mixer layer.",
    "short_label": "SOLO 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1992-2005",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1992-L2005"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "press",
    "action": "Loads slot 16 from the current user or factory bank into the workspace and retains the current playing state.",
    "short_label": "LOAD 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2024-2038",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2024-L2038"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1684-1706",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1684-L1706"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "press",
    "action": "Selects position 16 within the cursor’s 16-step page and cancels action confirmation.",
    "short_label": "DEST 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2064-2068",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2064-L2068"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "154",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L154"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   },
   {
    "mode": "fm_env",
    "gesture": "press",
    "action": "For a pad source, selects the engine-mapped pad for editing when the key maps to a pad and also posts its note.",
    "short_label": "PAD EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2277-2297",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2277-L2297"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2469-2484",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2469-L2484"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "288-292",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L288-L292"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the keyboard octave is below zero outside the step and action pages.",
    "short_label": "LOW OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "lit",
    "action": "Lights when an earlier 16-step page exists.",
    "short_label": "EARLIER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "lit",
    "action": "Lights when an earlier 16-step page exists.",
    "short_label": "EARLIER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "lit",
    "action": "Lights when an earlier 16-step page exists.",
    "short_label": "EARLIER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "lit",
    "action": "Lights when an earlier 16-step page exists.",
    "short_label": "EARLIER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "lit",
    "action": "Lights when an earlier 16-step page exists.",
    "short_label": "EARLIER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "lit",
    "action": "Lights when an earlier 16-step page exists.",
    "short_label": "EARLIER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the keyboard octave is above zero outside the step and action pages.",
    "short_label": "HIGH OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "lit",
    "action": "Lights when a later 16-step page exists.",
    "short_label": "LATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "actions",
    "gesture": "lit",
    "action": "Lights when a later 16-step page exists.",
    "short_label": "LATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "lit",
    "action": "Lights when a later 16-step page exists.",
    "short_label": "LATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "lit",
    "action": "Lights when a later 16-step page exists.",
    "short_label": "LATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "lit",
    "action": "Lights when a later 16-step page exists.",
    "short_label": "LATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "lit",
    "action": "Lights when a later 16-step page exists.",
    "short_label": "LATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1233",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1233"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the HOME overview is visible.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1234",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1234"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the effects editor is visible.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1234",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1234"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the selected track’s arpeggiator is enabled.",
    "short_label": "ARP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1235",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1235"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "fm_edit",
    "gesture": "lit",
    "action": "Lights on the DX7 scaling and curves pages.",
    "short_label": "SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1236",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1236"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights on sequence and sequence-action pages.",
    "short_label": "SEQUENCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1237",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1237"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the APP recording flag is set.",
    "short_label": "RECORDING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1238",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1238"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the engine reports playback running.",
    "short_label": "PLAYING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1239",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1239"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the mixer is visible.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1239",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1239"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1361",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1361"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights in the quick, full FM and other source editors.",
    "short_label": "EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1240",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1240"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the envelope editor is visible.",
    "short_label": "ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1241",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1241"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the LFO editor is visible.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1241",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1241"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights in the project-save and source menus and while an action awaits destructive confirmation.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1242",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1242"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark when its stated lighting conditions are false.",
    "short_label": "OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1231-1246",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1231-L1246"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Outside sequence, browser and mixer displays, lights the keys whose notes the APP still tracks.",
    "short_label": "LOCAL NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1186-1212",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1186-L1212"
     }
    ]
   },
   {
    "mode": "browser",
    "gesture": "lit",
    "action": "Lights the white key for the selected preset slot.",
    "short_label": "PRESET SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1198-1199",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1198-L1199"
     }
    ]
   },
   {
    "mode": "mix",
    "gesture": "lit",
    "action": "Lights the first eight white keys for muted tracks and the next eight for soloed tracks.",
    "short_label": "MIX STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1200-1207",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1200-L1207"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "lit",
    "action": "Lights the first eight white keys for muted tracks and the next eight for soloed tracks.",
    "short_label": "MIX STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1200-1207",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1200-L1207"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1361",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1361"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "lit",
    "action": "Lights enabled operator keys whose mute bits are clear and the current MONO or POLY key outside the selected-key blink.",
    "short_label": "OP STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1213-1221",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1213-L1221"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "725-730",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L725-L730"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2856",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2856"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "2892-2896",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2892-L2896"
     }
    ]
   },
   {
    "mode": "fm_edit",
    "gesture": "blinking",
    "action": "Blinks the selected OP, PITCH or GLOBAL key with alternating 250 ms phases.",
    "short_label": "EDIT TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1189",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1189"
     },
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1217-1220",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1217-L1220"
     }
    ]
   },
   {
    "mode": "tone_edit",
    "gesture": "lit",
    "action": "For BASS 303, lights the MONO or POLY key matching the engine’s reported mode.",
    "short_label": "VOICE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1222-1224",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1222-L1224"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "lit",
    "action": "With recording off, lights active cells in the visible page of the selected melodic or drum lane.",
    "short_label": "STEP STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1189-1195",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1189-L1195"
     }
    ]
   },
   {
    "mode": "steps_basic",
    "gesture": "flash",
    "action": "With recording off, inverts the playhead key’s light when its page is visible during playback.",
    "short_label": "PLAYHEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1196-1197",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1196-L1197"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "lit",
    "action": "With recording off, lights active cells in the visible page of the selected melodic or drum lane.",
    "short_label": "STEP STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1189-1195",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1189-L1195"
     }
    ]
   },
   {
    "mode": "steps_details",
    "gesture": "flash",
    "action": "With recording off, inverts the playhead key’s light when its page is visible during playback.",
    "short_label": "PLAYHEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1196-1197",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1196-L1197"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "lit",
    "action": "With recording off, lights active cells in the visible page of the selected melodic or drum lane.",
    "short_label": "STEP STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1189-1195",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1189-L1195"
     }
    ]
   },
   {
    "mode": "steps_rhythm",
    "gesture": "flash",
    "action": "With recording off, inverts the playhead key’s light when its page is visible during playback.",
    "short_label": "PLAYHEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1196-1197",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1196-L1197"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "lit",
    "action": "With recording off, lights active cells in the visible page of the selected melodic or drum lane.",
    "short_label": "STEP STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1189-1195",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1189-L1195"
     }
    ]
   },
   {
    "mode": "steps_locks",
    "gesture": "flash",
    "action": "With recording off, inverts the playhead key’s light when its page is visible during playback.",
    "short_label": "PLAYHEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1196-1197",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1196-L1197"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "lit",
    "action": "With recording off, lights active cells in the visible page of the selected melodic or drum lane.",
    "short_label": "STEP STATES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1189-1195",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1189-L1195"
     }
    ]
   },
   {
    "mode": "steps_sync",
    "gesture": "flash",
    "action": "With recording off, inverts the playhead key’s light when its page is visible during playback.",
    "short_label": "PLAYHEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "m-vave/fm1_open",
      "ref": "V12",
      "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
      "path": "app/screen.c",
      "lines": "1196-1197",
      "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1196-L1197"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_f3",
   "led_fs3",
   "led_g3",
   "led_gs3",
   "led_a3",
   "led_as3",
   "led_b3",
   "led_c4",
   "led_cs4",
   "led_d4",
   "led_ds4",
   "led_e4",
   "led_f4",
   "led_fs4",
   "led_g4",
   "led_gs4",
   "led_a4",
   "led_as4",
   "led_b4",
   "led_c5",
   "led_cs5",
   "led_d5",
   "led_ds5",
   "led_e5",
   "led_f5",
   "led_fs5",
   "led_g5"
  ]
 },
 "switching_note": {
  "kept_on_unit": "While Open remains installed, sixteen USER slots retain project settings and patterns; a separate eight-slot audio bank is shared across projects, and preferences remember the last USER slot, clock and radio choices. Do not rely on these saves surviving a firmware switch. Installing stock V15 (including through Open’s own Workbench) or another mapped firmware with a verified install footprint wipes Open’s sixteen USER projects, preferences, shared staging copy and sample header, including the first 24 KiB of the sample bank. Baud Girl’s installer is not public, so assume the same loss when switching to it. Export projects and device samples before leaving Open. See the switching advice in this section for risks and evidence. From the flash atlas (generated): install through the official Workbench: Installs Open’s program and bundled resources. Saved projects and samples have their own reserved USER area in this package; the native loader is closed, so its exact erase footprint is not verified (after you acknowledge the backup warning and start installation; a forced install asks again). start-up without Workbench: Loads the remembered USER project and preferences and checks the sample bank, using defaults or an empty state when data is missing. The APP does not save projects, complete pending saves or create factory samples at boot. Private SDK writes remain unknown (before any later edit, save or host sample initialization). Workbench sample initialization after install: Right after Workbench successfully installs Open over another mapped firmware, it uploads factory audio without a separate confirmation. The source-built V12 bank erases 0x8D000–0x9FFFF before any project save, overwriting the previous firmware’s data there. The shipped Workbench asset was not compared with the source. Updating Open itself can retain a ready bank; a read or CRC error is not automatically repaired (after a successful Workbench installation of Open from another mapped firmware). Workbench return to stock V15: Installs bundled stock V15, then restores its 128 factory voices over all four voice banks. The incoming program image covers Open’s USER projects, preferences, staging and sample header, including the first 24 KiB of sample storage. If the device already runs V15, it skips reflashing and restores only the voice banks. The native loader’s exact erases and physical voice-bank addresses remain unverified (when you acknowledge backup and confirm stock recovery) [inferred]. Workbench stock recovery while already on V15: Restores all four factory voice banks without reflashing the firmware; their physical flash addresses are not established by this handler (after confirmation, when the connected device is already stock V15). What M-VAVE FM-1 Open writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over M-VAVE FM-1 Open's is in when_you_leave.",
  "lost": "Installing stock V15 (including through Open’s own Workbench) or another mapped firmware with a verified install footprint wipes Open’s sixteen USER projects, preferences, shared staging copy and sample header, including the first 24 KiB of the sample bank. Baud Girl’s installer is not public, so assume the same loss when switching to it. Export projects and device samples before leaving Open. See the switching advice in this section for risks and evidence. Unsaved working edits have no project autosave. A whole-project load replaces RAM without an unsaved-edits question. Sample replacement has no second bank. Legacy Open projects migrate in RAM and use the new record on the next save or settings write; the Workbench has no reverse converter for older 4048-byte project devices. The Workbench stock-return action installs the bundled V15 image and then replaces four stock voice banks with 128 factory voices; if the connected unit already runs V15, it skips flashing and replaces only those banks. It asks confirmation first. From the flash atlas (generated): No other firmware reads M-VAVE FM-1 Open's data, and M-VAVE FM-1 Open reads none of theirs.",
  "back_up_first": "Export each working or loaded USER project as .fm1 in the matching Workbench. To back up device audio, connect and use Read device sample bank before Back up browser sample bank to save .fm1s; the browser initially holds demo audio, not your unit’s audio. To restore audio, load the .fm1s into the browser, then use Write device sample bank and confirm. File loading alone does not write the unit. Track .fm1t and DX7 .syx exports are also available. Project imports stay in RAM until separately saved. Preferences and pairing keys have no identified backup export. Installing stock V15 (including through Open’s own Workbench) or another mapped firmware with a verified install footprint wipes Open’s sixteen USER projects, preferences, shared staging copy and sample header, including the first 24 KiB of the sample bank. Baud Girl’s installer is not public, so assume the same loss when switching to it. Export projects and device samples before leaving Open. See the switching advice in this section for risks and evidence.",
  "saving_note": "Panel SAVE opens the save page on the remembered USER slot, and the next SAVE writes it without an overwrite question, even if the workspace now contains a factory or imported project. Only choosing a different valid occupied USER slot requires another SAVE. The save page starts on the last USER slot loaded or saved; factory loads and file imports leave that remembered slot unchanged. Preferences write after 1.5 seconds following edits or immediately after remembered USER-slot changes. Staging is transaction recovery, not a backup. Startup reads and attempts to load the remembered USER project into RAM without writing APP storage. After an Open install, a missing sample header can trigger a host factory-bank upload without a separate sample prompt. When no sample header is recognized after installation, the source-built V12 Workbench uploads its 76,436-byte factory bank without a separate sample confirmation. This erases nineteen sectors at 0x8D000–0x9FFFF. That overwrites overlapping projects, sections, sound/stream data and bank copies belonging to the firmware being replaced before the owner makes a project save. The install backup checkbox is the warning.",
  "own_storage_layout": "The package declares USER at 0x7C000–0xFEFFF; relative APP offsets put project slots at 0x7C000–0x8BFFF, preferences within slot 16 at 0x8B000, shared staging at 0x8C000 and sample capacity at 0x8D000–0xFEFFF. These physical addresses are inferred from package descriptors and the SDK interface, whose native implementation is closed; exact native loader and private Bluetooth writes remain unknown.",
  "source": [
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/instrument.h",
    "lines": "121-145",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L121-L145"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/instrument.h",
    "lines": "169-177",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L169-L177"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/instrument.h",
    "lines": "257-259",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L257-L259"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/project.c",
    "lines": "59-98",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L59-L98"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/project.c",
    "lines": "124-196",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L124-L196"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/project.c",
    "lines": "237-290",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L237-L290"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/project.c",
    "lines": "293-327",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L293-L327"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/project.c",
    "lines": "353-417",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L353-L417"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/screen.c",
    "lines": "1686-1705",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1686-L1705"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/screen.c",
    "lines": "2127-2138",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2127-L2138"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/samples.c",
    "lines": "152-227",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/samples.c#L152-L227"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Package.cs",
    "lines": "100-106",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Package.cs#L100-L106"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Package.cs",
    "lines": "138-153",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Package.cs#L138-L153"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/include/fm1.h",
    "lines": "127-139",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/include/fm1.h#L127-L139"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/WebUpdate.js",
    "lines": "626-637",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/WebUpdate.js#L626-L637"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Update.html.in",
    "lines": "609-650",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L609-L650"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Update.html.in",
    "lines": "652-670",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L652-L670"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Samples.js",
    "lines": "43-65",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Samples.js#L43-L65"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Samples.js",
    "lines": "179-188",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Samples.js#L179-L188"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Samples.js",
    "lines": "181-192",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Samples.js#L181-L192"
   },
   {
    "kind": "doc",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/I18n.js",
    "lines": "434",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/I18n.js#L434"
   },
   {
    "kind": "doc",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Update.html.in",
    "lines": "99-100",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L99-L100"
   },
   {
    "kind": "doc",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Update.html.in",
    "lines": "254-256",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L254-L256"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Update.html.in",
    "lines": "652-663",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L652-L663"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/WebUpdate.js",
    "lines": "53-92",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/WebUpdate.js#L53-L92"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Package.cs",
    "lines": "12-13",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Package.cs#L12-L13"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/project.c",
    "lines": "11-24",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/project.c#L11-L24"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "web/synth/demo_bank.h",
    "lines": "21",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/web/synth/demo_bank.h#L21"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "web/synth/demo_bank.h",
    "lines": "97-117",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/web/synth/demo_bank.h#L97-L117"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/synth/sampledrum.h",
    "lines": "12-15",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/synth/sampledrum.h#L12-L15"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/samples.c",
    "lines": "152-209",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/samples.c#L152-L209"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/WebUpdate.js",
    "lines": "376-401",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/WebUpdate.js#L376-L401"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/WebUpdate.js",
    "lines": "412-415",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/WebUpdate.js#L412-L415"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/WebUpdate.js",
    "lines": "435-439",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/WebUpdate.js#L435-L439"
   },
   {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Build.ps1",
    "lines": "432-442",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Build.ps1#L432-L442"
   }
  ],
  "switching_evidence": {
   "evidence": "inferred",
   "basis": "Open package partition and APP offsets compared with the existing atlas installation ranges and the read-only decoded bundled stock flash.bin size 0x93000; no unit tested.",
   "stock_package_sha256": "db1642b2b6fa5c2cccb11ffd13878068bb28601678d3644049f99dc40e7edb8a",
   "stock_flash_image_bytes": 602112,
   "atlas_basis": "flash-atlas/atlas.json install_and_startup_writes for stock, Felucca, SLOOP, X0X, JIANT, Melodee and FoMni",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "sdk/Package.cs",
     "lines": "100-106",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Package.cs#L100-L106"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/instrument.h",
     "lines": "257-259",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L257-L259"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "sdk/WebUpdate.js",
     "lines": "53-92",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/WebUpdate.js#L53-L92"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "sdk/Build.ps1",
     "lines": "432-438",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Build.ps1#L432-L438"
    }
   ]
  },
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)",
     "stock Bluetooth data",
     "stock voices (128 user patches, banks A-D)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns); stock Bluetooth data; stock voices (128 user patches, banks A-D). The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks). The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets. At risk when you act: user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32; the autosave (the music as you left it); FM6 voice bank B1-B32; settings, button calibration, favourites, MIDI LEARN map. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1 (header at 0xA0000)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2 (header at 0xB4000)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3 (header at 0xC8000)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR4 (header at 0xE7000)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); the music in progress (autosave). At risk when you act: user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); user sample slot USR3 (header at 0xC8000); user sounds U01-U16; user sounds U17-U32; FM6 patch bank B1-B27; user sample slot USR4 (header at 0xE7000); settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: break loops slot 1; break loops slot 2; break loops slot 3; X0X button calibration. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project); FM6 patches of the FM6 user sounds. At risk when you act: song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; user sounds U01-U16; user sounds U17-U32; the music in progress (RESTORE LAST); FM6 voice bank B1-B32; settings, calibration, favourites, MENU options. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U289-U378",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U127-U144",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: shared user presets U289-U378; shared user presets U379-U384; shared user presets U109-U126. At risk when you act: project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036; shared user presets U037-U054; shared user presets U055-U072; shared user presets U127-U144; settings, factory favourites, calibration, saved template. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FoMni button calibration; FoMni setup (pages, chord buttons, lights).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: AMB-1 panel calibration; AMB-1 pieces and setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last global-save session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: 32 imported DX7 voices. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last global-save session; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10; options, playing setup and panel calibration. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches for user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: project A; project B; project C; project D; FM6 patches for user sounds. At risk when you act: user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds 1–16; user sounds 17–32; music in progress (RESTORE LAST); FM6 voice bank B1–B32; settings and panel calibration. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls."
    ],
    "owner_text": "At risk by itself: older stored user bank, if present (Beta4 does not store new edits). At risk when you act: octave, last selected preset and MIDI preferences. A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D. At risk when you act: user samples USR1; user samples USR2; user samples USR3; settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "pattern 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: pattern 1; pattern 2; pattern 3; pattern 4; pattern 5; pattern 6; pattern 7; pattern 8; saved programs and global settings.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Optional QY70 style bank; All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 4. At risk when you act: Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Polly button and encoder calibration; Polly setup and channel sounds.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sounds’ own FM6 patches; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk when you act: user sample USR1; user sample USR2; user sample USR3; last session; shared 64-pattern pool; settings, calibration and favourites.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "S?",
    "weakest_grade": "reported",
    "at_risk": [
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Stock V15",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences; Open shared sample audio. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Open USER project 1",
     "Open USER project 2",
     "Open USER project 3",
     "Open USER project 4",
     "Open USER project 5",
     "Open USER project 6",
     "Open USER project 7",
     "Open USER project 8",
     "Open USER project 9",
     "Open USER project 10",
     "Open USER project 11",
     "Open USER project 12",
     "Open USER project 13",
     "Open USER project 14",
     "Open USER project 15",
     "Open USER project 16",
     "Open device preferences",
     "Open shared sample audio"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Open’s sixteen USER projects and device preferences are likely to be lost when installing Baud Girl, and its sample bank is also at risk. Her installer and package footprint have not been read, so these losses remain possible rather than source-proven. Export all projects and device samples before leaving Open."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences; Open shared sample audio. Open’s sixteen USER projects and device preferences are likely to be lost when installing Baud Girl, and its sample bank is also at risk. Her installer and package footprint have not been read, so these losses remain possible rather than source-proven. Export all projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Felucca (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save the song order (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send or remove a theme from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send the song from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start an update (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store drum kits from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only after a retained second-core failure, if two cores were enabled",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if the journal has nonblank invalid metadata or invalid entries",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a USB restore (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install JIANT",
        "effect": "lost"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
     "After M-VAVE Open, if no readable JIANT/Felucca-family settings copy remains, JIANT starts with RESTORE LAST OFF; its autosave writes only after you enable RESTORE LAST."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open. After M-VAVE Open, if no readable JIANT/Felucca-family settings copy remains, JIANT starts with RESTORE LAST OFF; its autosave writes only after you enable RESTORE LAST.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you change a setting (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you change a setting in the menu (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore an older 28-object Melodee backup (clears U379-U384 first) (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a template (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Melodee (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FoMni (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install AMB-1 (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a save or failed boot preparation leaves its next spare unprepared",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an older ChoralRoot favourites save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an older ChoralRoot session save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an older ChoralRoot sound-pool save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if core failure barred Dual Core while the stored setting was On",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if no pool bank exists and at least one legacy UPB1/192 sound passes validation",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and accept with OCT+ or SAVE (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm deletion/reset with OCT+ (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while switching on (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold SAVE after recording/editing/clearing this loop (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you press REC in Advance mode with a nonempty current loop (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request Import 0.21 sounds from the device manager (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank A (id 14) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank B (id 15) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank C (id 16) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank D (id 17) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank E (id 18) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank F (id 19) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank G (id 20) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank H (id 21) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore FM6 bank id 8 from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore favourites from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 40; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 41; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 42; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 43; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 44; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 45; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 46; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 47; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 48; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 49; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore pool banks 50..62, or accepted legacy sound objects that are redirected into pool slots 1..32 from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore settings from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore settings, which also writes an empty session record from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send a DX7 bank dump (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware install (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install ChoralRoot",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if no valid UPF6 exists and a valid old type-7 FM6B bank survives",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save an FM6 user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 user patch",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 voice bank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send settings from the editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install GHOULBOX (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if the update staging probes contain a nonblank byte",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm deletion of the active user slot (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you release a short SAVE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update from FM-106 (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM-106 (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if either update-area probe is not erased",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if the update staging probes contain a nonblank byte",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 1 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 2 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 3 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 4 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 5 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 6 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 7 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request a copy into pattern 8 (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update from OberVave (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you tap SAVE in the sequencer (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install OberVave (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a sector tail contains a valid update record",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if the checked loader or update-record bytes are not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if the restore-journal sector begins with a nonblank invalid record",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you complete power-on hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm RESTORE FROM USB (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update while Polly is running (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Polly (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a valid retired FM6 patch bank remains and no current patch object loads",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if either update-area probe is not erased",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save an FM6 user sound (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store an FM6 sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you write an FM6 patch to a user sound from the editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "SEL page hint",
   "docs_say": "The generic sound-editor footer says SEL PAGE.",
   "source_says": "SELECT turns full-edit pages; the SEL button jumps to DX7 scaling/curves or the non-FM advanced starting page.",
   "docs_ref": {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/screen.c",
    "lines": "1548-1553",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1548-L1553"
   },
   "source_ref": {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/screen.c",
    "lines": "1936-1945",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1936-L1945"
   }
  },
  {
   "topic": "SEL on non-FM sources",
   "docs_say": "The guide describes SCL as entering scaling without limiting that row to DX7.",
   "source_says": "For non-FM sources SEL opens advanced tone editing at 303 page 2 or page 1 for the other source types.",
   "docs_ref": {
    "kind": "doc",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "sdk/Update.html.in",
    "lines": "184",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L184"
   },
   "source_ref": {
    "kind": "source",
    "repo": "m-vave/fm1_open",
    "ref": "V12",
    "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
    "path": "app/screen.c",
    "lines": "1936-1945",
    "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1936-L1945"
   }
  }
 ],
 "not_mapped": [
  "The native synthesis, sequencer, recording, arpeggiator, undo and source-change implementations are inside the closed SDK; this map records APP calls and displays, not verified engine behavior or audible results (LICENSE.md:5-13; THIRD_PARTY.md:23-41; app/instrument.h).",
  "Native PSG, pluck and 808 descriptor tables remain closed; positional routing comes from the APP, while the PSG ENV Release name comes from the Workbench guide and is graded vendor-doc, not native-source evidence.",
  "Exact note/pad mapping is returned by the closed groove_key_note / groove_pad_index APIs, so keys are mapped as engine-assigned notes rather than assumed fixed drum or chromatic pitches.",
  "Blank DX7 knob positions pass parameter index 255 to groove_fm_edit; the APP does not inspect the result and the native implementation is unavailable.",
  "STEP_EDIT and RHYTHM enum pages have no physical input path at this tag; their menu commands instead open SEQ pages 2 and 3, so they are not counted as separate reachable modes.",
  "A separate green PLAY LED has no distinct APP write path in the 41-output scanner, so its physical electrical behavior is not asserted.",
  "No unit was tested and no firmware, build, source script or bundled binary was run.",
  "Native updater, VM and Bluetooth pairing persistence are opaque; the storage fragment separates known APP storage calls, calculated physical ranges and these unknowns."
 ],
 "action_menu": [
  {
   "name": "Step details",
   "selected_index": 0,
   "action": "Opens SEQ Step Details.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2079",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2079"
    }
   ]
  },
  {
   "name": "Rhythm / Rec",
   "selected_index": 1,
   "action": "Opens SEQ Rhythm/Record.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2079",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2079"
    }
   ]
  },
  {
   "name": "Copy step",
   "selected_index": 2,
   "action": "Requests a one-step copy and selects Paste Step on success.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2080-2082",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2080-L2082"
    }
   ]
  },
  {
   "name": "Copy page",
   "selected_index": 3,
   "action": "Requests a sixteen-step copy and selects Paste Page on success.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2080-2082",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2080-L2082"
    }
   ]
  },
  {
   "name": "Copy track",
   "selected_index": 4,
   "action": "Requests a whole-track copy and selects Paste Track on success.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2080-2082",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2080-L2082"
    }
   ]
  },
  {
   "name": "Paste step",
   "selected_index": 5,
   "action": "Requests a one-step paste only when the clipboard contains one cell.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2084-2086",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2084-L2086"
    }
   ]
  },
  {
   "name": "Paste page",
   "selected_index": 6,
   "action": "Requests a page paste only when the clipboard contains sixteen cells.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2084-2086",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2084-L2086"
    }
   ]
  },
  {
   "name": "Paste track",
   "selected_index": 7,
   "action": "After confirmation requests a track paste only when the clipboard contains sixty-four cells.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2086",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2086"
    }
   ]
  },
  {
   "name": "Clear step",
   "selected_index": 8,
   "action": "After confirmation requests clearing the selected step.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2088",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2088"
    }
   ]
  },
  {
   "name": "Clear page",
   "selected_index": 9,
   "action": "After confirmation requests clearing the selected sixteen-step page.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2088",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2088"
    }
   ]
  },
  {
   "name": "Clear track",
   "selected_index": 10,
   "action": "After confirmation requests clearing the selected track.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2088",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2088"
    }
   ]
  },
  {
   "name": "Repeat 32",
   "selected_index": 11,
   "action": "After confirmation requests repeating the track to 32 steps.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2089",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2089"
    }
   ]
  },
  {
   "name": "Repeat 48",
   "selected_index": 12,
   "action": "After confirmation requests repeating the track to 48 steps.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2089",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2089"
    }
   ]
  },
  {
   "name": "Repeat 64",
   "selected_index": 13,
   "action": "After confirmation requests repeating the track to 64 steps.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2089",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2089"
    }
   ]
  },
  {
   "name": "Undo / redo",
   "selected_index": 14,
   "action": "Requests the engine’s snapshot undo/redo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2090",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2090"
    }
   ]
  },
  {
   "name": "Copy timbre",
   "selected_index": 15,
   "action": "Exports the selected track timbre to a RAM clipboard.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2091",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2091"
    }
   ]
  },
  {
   "name": "Paste timbre",
   "selected_index": 16,
   "action": "After confirmation imports the clipboard’s timbre and source type, which the guide warns can clear incompatible steps when crossing between drums and pitched sources.",
   "evidence": "vendor-doc",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2073-2092",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2073-L2092"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/instrument.h",
     "lines": "28-31",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L28-L31"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/instrument.h",
     "lines": "236-237",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/instrument.h#L236-L237"
    },
    {
     "kind": "doc",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "sdk/Update.html.in",
     "lines": "625-629",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/sdk/Update.html.in#L625-L629"
    }
   ]
  },
  {
   "name": "Patch name",
   "selected_index": 17,
   "action": "Opens patch-name editing only for DX7 tracks.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2093-2095",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2093-L2095"
    }
   ]
  },
  {
   "name": "BT / Clock",
   "selected_index": 18,
   "action": "Opens Bluetooth and clock settings.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2096",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2096"
    }
   ]
  },
  {
   "name": "Stop / reset",
   "selected_index": 19,
   "action": "Posts reset, clears tracked notes, disables recording and returns to the overview.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "174-177",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L174-L177"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2097-2099",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2097-L2099"
    }
   ]
  }
 ],
 "interaction_notes": [
  {
   "text": "Global shortcuts run before page handlers; a GLO hold then overrides normal page editing, while navigation buttons cancel its layer. Keys held across navigation remain blocked until release. Continuous FM/tone values accelerate with sustained fast turns; page selectors use raw movement or its sign.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1854-1897",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1854-L1897"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1922-1957",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1922-L1957"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "1995-2005",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L1995-L2005"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "2436-2456",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L2436-L2456"
    },
    {
     "kind": "source",
     "repo": "m-vave/fm1_open",
     "ref": "V12",
     "commit": "3be7fbdbd3bb137bacbd65d68412c210eb977870",
     "path": "app/screen.c",
     "lines": "300-327",
     "url": "https://github.com/m-vave/fm1_open/blob/3be7fbdbd3bb137bacbd65d68412c210eb977870/app/screen.c#L300-L327"
    }
   ]
  }
 ],
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 sample backup and restore",
   "fixed": "Specify device read before browser export, and a separate confirmed device write after loading a sample file.",
   "at": "switching_note.back_up_first; guide save/backup and switching sections; storage.firmware_notes[2]"
  },
  {
   "round": 1,
   "error": "2 leaving Open loses saved data",
   "fixed": "State the install-time loss directly and flag Open’s absence from Les’s switching table; add empty generated-block markers.",
   "at": "switching_note.kept_on_unit/lost/back_up_first; guide switching section; storage.firmware_notes[3]"
  },
  {
   "round": 1,
   "error": "3 remembered USER slot overwrite",
   "fixed": "Explain preselection and silent replacement after factory loads/imports in save controls and storage triggers.",
   "at": "controls.button_save[1-2]; controls.encoder_select[18]; controls.encoder_presets[2]; switching_note.saving_note; storage panel-save triggers; guide"
  },
  {
   "round": 1,
   "error": "4 post-install factory-bank erases",
   "fixed": "Calculate 76436-byte bank and nineteen-sector erase range, with explicit previous-layout losses and source-built asset caveat.",
   "at": "storage.install_and_startup_writes[2]; storage.samples automatic trigger/reads_foreign/unknowns[1]; switching_note.saving_note; guide"
  },
  {
   "round": 1,
   "error": "5 operator LED polarity",
   "fixed": "Change disabled to enabled, retaining selected-key blink precedence.",
   "at": "lights.key_lights[4]; guide lights table"
  },
  {
   "round": 1,
   "error": "6 stock recovery writes",
   "fixed": "Add confirmed stock-install plus four-bank factory reset, and already-V15 banks-only branch.",
   "at": "storage.install_and_startup_writes appended rows; switching_note.lost; guide switching section"
  },
  {
   "round": 1,
   "error": "7 Paste Timbre clears steps",
   "fixed": "Warn about source-type replacement and incompatible-step clearing, grading the closed-engine consequence vendor-doc.",
   "at": "action_menu[16]; controls.button_save[6]; guide Actions table"
  },
  {
   "round": 1,
   "error": "8 header and startup indicators",
   "fixed": "Append sourced header/hold-bar entries and describe the startup RAM reload.",
   "at": "controls.screen appended entries 46–51 and [40]; modes.startup; storage startup row; guide"
  },
  {
   "round": 1,
   "error": "9 unreachable MIDI-OFF label",
   "fixed": "Remove the claimed discrepancy because the OFF drawing branch cannot be reached and the guide correctly names DEVICE/HOST.",
   "at": "disagreements former [0]; guide disagreements"
  },
  {
   "round": 1,
   "error": "10 main user guide and PSG Release",
   "fixed": "Register the Workbench guide with English strings, add its genuine non-FM SEL discrepancy, and label PSG ENV Release as vendor-doc.",
   "at": "docs appended guide; registry.sources; disagreements appended; controls.encoder_knob1[17]; guide"
  },
  {
   "round": 1,
   "error": "11 withdrawn publication date",
   "fixed": "Keep the upstream release-object date while explicitly distinguishing the October 16 return and reported commit timestamp.",
   "at": "release_date_note; mapped_source_date; release_metadata_evidence; guide release line"
  },
  {
   "round": 1,
   "error": "12 official Workbench link",
   "fixed": "Add official Workbench and matching V12 release-asset links alongside the release page.",
   "at": "install.workbench/release_workbench/source; guide release links"
  },
  {
   "round": 1,
   "error": "13 volume wording and Note notice",
   "fixed": "Use track volume in the mixer guide and correct Locks Note to its melodic-only no-notice path. Rephrase the shared-effects screen description in Les’s own words.",
   "at": "controls.encoder_knob4[35]; guide mixer row; controls.screen[15]"
  },
  {
   "round": 2,
   "error": "1 remembered-slot prompt overstated",
   "fixed": "Split all 18 panel-save triggers: edit the existing trigger to cover the remembered destination with asks_first false, and append a different-destination trigger with only_if_own_data; staging notes tie any question to the destination project.",
   "at": "storage.objects project_01..project_16, settings and staging: existing panel trigger and appended written_when entry"
  },
  {
   "round": 2,
   "error": "2 previous firmware wording",
   "fixed": "Replace incoming-layout wording with the firmware being replaced in all three post-install descriptions; clarify JIANT song 1 sections and restoring by hand in the guide.",
   "at": "switching_note.saving_note; storage.install_and_startup_writes[2].what; storage.objects samples automatic trigger.note; guide switching section"
  },
  {
   "round": 3,
   "error": "labels: uppercase house style; home primaries shortened",
   "fixed": "Uppercase every short_label, shorten overview button/encoder/knob primaries, and replace plain key NOTE labels with physical note names F3–G5 including sharps.",
   "at": "controls.*[].short_label; lights.*[].short_label"
  },
  {
   "round": 4,
   "error": "MINOR: button_play_stop[0] label PLAY named only half its job",
   "fixed": "Label PLAY/STOP, as the other maps label the same job (app/screen.c:2430-2434@3be7fbd).",
   "at": "controls.button_play_stop[0].short_label"
  },
  {
   "round": 6,
   "error": "keys: menu silence label",
   "fixed": "Change all 27 key menu-silence labels from MENU to NO NOTE; re-read V12 menu handlers and confirmed no key job in project save, patch naming, Bluetooth, MIDI host or source selection requires an added entry; retain the seven UNUSED encoder fallbacks.",
   "at": "controls.key_*[3].short_label"
  },
  {
   "round": 7,
   "error": "wipes vs Baud Girl installer evidence",
   "fixed": "Limit the definite wipe statement to stock V15 and mapped firmware with verified install footprints, and explicitly tell owners to assume the same loss for Baud Girl because its installer is not public.",
   "at": "switching_note.kept_on_unit/lost before generated text; switching_note.back_up_first; guide hand-written switching paragraph"
  }
 ],
 "release_date_note": "2026-10-14 is the upstream release-object date retained from the withdrawn publication; the V12 source snapshot mapped here returned on 2026-10-16. The round-1 report gives commit authorship as 2026-10-16T08:26Z; that timestamp is reported metadata, not independently verified from this extracted source tree.",
 "mapped_source_date": "2026-10-16",
 "release_metadata_evidence": "reported (supplied release brief and independent round-1 report); app/version.h confirms V12 but contains no publication timestamp"
}