{
 "firmware": "FM1 Move",
 "slug": "fm1move",
 "author": "nicodesy06 (FM1 Move); based on SLOOP by isod89 and Felucca by Leo Kuroshita / Hügelton Instruments",
 "repo": "https://github.com/nicodesy06/fm1-move",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "0.3.1",
 "mapped_commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
 "release_date": "2026-10-15",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 3 (2026-10-17). No device testing.",
 "version_note": "Experimental beta; pinned to the installer package at 42fc1af because different commits shipped packages named 0.3.1; no structured hardware test pass by the maintainer and nothing in this map was tested on a unit.",
 "turns_it_into": "An eight-track groovebox with synth or drum tracks, six clips per track, scenes and timing tools.",
 "docs": [
  {
   "title": "FM1 Move guide",
   "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/manual/index.html",
   "path": "docs/manual/index.html",
   "read_at": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "title": "Panel mapping",
   "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/UI_MAPPING.md",
   "path": "docs/UI_MAPPING.md",
   "read_at": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "title": "README",
   "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/README.md",
   "path": "README.md",
   "read_at": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  }
 ],
 "install": {
  "official": "https://nicodesy06.github.io/FM1-MOVE/device/",
  "hub": "https://thefirmwarehub.com/",
  "installer": "https://nicodesy06.github.io/FM1-MOVE/device/",
  "note": "This snapshot has no tag, published GitHub release or hub listing; the author’s device page offers the pinned 0.3.1 package."
 },
 "part_id_notes": "B_SCL is the printed SEL button; SAVE opens CLIPS, ARP opens GROOVE, GLO opens MIXER and EDIT opens SOUND; keys use the shared physical F3–G5 ids regardless of transposition; button LEDs are keyed by button part and key LEDs are grouped under lights.key_lights.",
 "licence_source": [
  {
   "kind": "doc",
   "repo": "nicodesy06/fm1-move",
   "ref": "0.3.1",
   "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
   "path": "README.md",
   "lines": "167-175",
   "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/README.md#L167-L175"
  },
  {
   "kind": "doc",
   "repo": "nicodesy06/fm1-move",
   "ref": "0.3.1",
   "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
   "path": "LICENSING.md",
   "lines": "3-17",
   "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/LICENSING.md#L3-L17"
  },
  {
   "kind": "doc",
   "repo": "nicodesy06/fm1-move",
   "ref": "0.3.1",
   "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
   "path": "LICENSE",
   "lines": "1-4",
   "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/LICENSE#L1-L4"
  }
 ],
 "modes": [
  {
   "id": "play",
   "name": "Play",
   "how_to_get_there": "Tap HOME.",
   "what_it_is": "Play the selected track and see the eight-track overview.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "280-325",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L280-L325"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "787-795",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L787-L795"
    }
   ]
  },
  {
   "id": "tracks",
   "name": "Tracks",
   "how_to_get_there": "Tap SEL.",
   "what_it_is": "Choose a synth or drum role for a track and adjust its pattern.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "327-354",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L327-L354"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "787-795",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L787-L795"
    }
   ]
  },
  {
   "id": "sequencer",
   "name": "Sequencer grid",
   "how_to_get_there": "Tap SEQ; tap it again if the synth STEP page is showing.",
   "what_it_is": "See sixteen steps at a time, with either synth notes or sixteen drum lanes.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "356-434",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L356-L434"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "435-441",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L435-L441"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "840-846",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840-L846"
    }
   ]
  },
  {
   "id": "step",
   "name": "Step entry",
   "how_to_get_there": "On a synth track, tap SEQ again from the sequencer grid.",
   "what_it_is": "Enter notes or chords at the cursor and edit their length and flags.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "454-525",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L454-L525"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "840-846",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840-L846"
    }
   ]
  },
  {
   "id": "groove",
   "name": "Groove",
   "how_to_get_there": "Tap ARP.",
   "what_it_is": "Adjust the selected track’s swing, timing quantize, groove template and humanize.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "610-650",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L610-L650"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "840-840",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840"
    }
   ]
  },
  {
   "id": "clips",
   "name": "Clips and scenes",
   "how_to_get_there": "Tap SAVE.",
   "what_it_is": "Manage six clips per track and launch matching clip numbers together as scenes.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "652-705",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L652-L705"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "834-838",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L834-L838"
    }
   ]
  },
  {
   "id": "mixer",
   "name": "Mixer",
   "how_to_get_there": "Tap GLO.",
   "what_it_is": "Adjust the selected track’s level, pan and two sends.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "707-744",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L707-L744"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "819-819",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L819"
    }
   ]
  },
  {
   "id": "sound",
   "name": "Preset",
   "how_to_get_there": "From PLAY on a synth track, tap EDIT to enter SOUND, then repeat EDIT until PRESET appears.",
   "what_it_is": "The PRESET page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "sound_env",
   "name": "Envelope",
   "how_to_get_there": "On a synth track, tap ENV, or cycle SOUND with EDIT.",
   "what_it_is": "The ENVELOPE page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "sound_lfo",
   "name": "LFO",
   "how_to_get_there": "On a synth track, tap LFO, or cycle SOUND with EDIT.",
   "what_it_is": "The LFO page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "sound_sync",
   "name": "Sound sync",
   "how_to_get_there": "From PLAY on a synth track, tap EDIT to enter SOUND, then repeat EDIT until SYNC appears.",
   "what_it_is": "The SYNC page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "sound_fx",
   "name": "Sound sends",
   "how_to_get_there": "From PLAY on a synth track, tap EDIT to enter SOUND, then repeat EDIT until SENDS appears.",
   "what_it_is": "The SENDS page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "sound_insert",
   "name": "Track insert",
   "how_to_get_there": "From PLAY on a synth track, tap EDIT to enter SOUND, then repeat EDIT until INSERT appears.",
   "what_it_is": "The INSERT page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "sound_filter",
   "name": "Insert mix and filter",
   "how_to_get_there": "From PLAY on a synth track, tap EDIT to enter SOUND, then repeat EDIT until INSERT 2 appears.",
   "what_it_is": "The INSERT 2 page of the selected synth track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-178",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "drum_sound",
   "name": "Drum kit",
   "how_to_get_there": "From PLAY on a drum track, tap EDIT and repeat until KIT appears; ENV or LFO opens KIT.",
   "what_it_is": "The KIT page of the selected drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-169",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L169"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "794-795",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L795"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "drum_insert",
   "name": "Drum insert",
   "how_to_get_there": "From PLAY on a drum track, tap EDIT and repeat until INSERT appears; ENV or LFO opens KIT.",
   "what_it_is": "The INSERT page of the selected drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-169",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L169"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "794-795",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L795"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "drum_insert_2",
   "name": "Drum insert mix",
   "how_to_get_there": "From PLAY on a drum track, tap EDIT and repeat until INSERT 2 appears; ENV or LFO opens KIT.",
   "what_it_is": "The INSERT 2 page of the selected drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "761-798",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "166-169",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L169"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "794-795",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L795"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1852-1856",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
    }
   ]
  },
  {
   "id": "perform",
   "name": "HOLD FX + KEY",
   "how_to_get_there": "Tap FX until HOLD FX + KEY appears.",
   "what_it_is": "PERFORM’s page for the sixteen white-key punch effects.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "800-827",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "140-145",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "180-181",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1858-1859",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
    }
   ]
  },
  {
   "id": "perform_black",
   "name": "Black-key effects",
   "how_to_get_there": "Tap FX and repeat until BLACK KEYS appears.",
   "what_it_is": "The black-key effects page of PERFORM.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "800-827",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "140-145",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "180-181",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1858-1859",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
    }
   ]
  },
  {
   "id": "texture",
   "name": "Texture",
   "how_to_get_there": "Tap FX and repeat until TEXTURE appears.",
   "what_it_is": "The texture page of PERFORM.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "800-827",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "140-145",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "180-181",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1858-1859",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
    }
   ]
  },
  {
   "id": "texture_2",
   "name": "Texture timing",
   "how_to_get_there": "Tap FX and repeat until TEXTURE 2 appears.",
   "what_it_is": "The texture timing page of PERFORM.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "800-827",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "140-145",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "180-181",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1858-1859",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
    }
   ]
  },
  {
   "id": "project",
   "name": "Projects",
   "how_to_get_there": "Hold HOME for over 0.7 seconds; hold it again if SETTINGS is showing.",
   "what_it_is": "Save, load or delete either of two project slots.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "829-845",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L829-L845"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "889-902",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L889-L902"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1890-1904",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1890-L1904"
    }
   ]
  },
  {
   "id": "settings",
   "name": "Settings",
   "how_to_get_there": "Hold HOME for over 0.7 seconds from PROJECT.",
   "what_it_is": "Change settings or read battery, audio load and version information.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "829-846",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L829-L846"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "116-117",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L116-L117"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "223-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L223-L225"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1905-1912",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1905-L1912"
    }
   ]
  },
  {
   "id": "steps",
   "name": "Held step grid",
   "how_to_get_there": "Hold SEQ for at least 0.25 seconds, or use a key or knob while holding it, outside the SEQUENCER screen.",
   "what_it_is": "An overlay gives the current page’s sixteen step keys a visible grid.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "538-579",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L538-L579"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1572-1610",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1572-L1610"
    }
   ]
  },
  {
   "id": "key",
   "name": "Held key and scale page",
   "how_to_get_there": "Hold SEL for at least 0.25 seconds, or use a key or knob while holding it.",
   "what_it_is": "See track selection and the selected synth’s key or chord layout.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "580-608",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L580-L608"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1572-1580",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1572-L1580"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1611-1641",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1611-L1641"
    }
   ]
  },
  {
   "id": "knob_focus",
   "name": "Knob value overlay",
   "how_to_get_there": "Turn an active KNOB 1–4 where a focus overlay is available.",
   "what_it_is": "The last adjusted value fills the body for 1.2 seconds after its last turn.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "256-277",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L256-L277"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "881-899",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L881-L899"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "17-19",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L17-L19"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1700-1705",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1700-L1705"
    }
   ]
  },
  {
   "id": "tempo_overlay",
   "name": "Tempo overlay",
   "how_to_get_there": "Turn ALGORITHM on PLAY, TRACKS, MIXER or PERFORM, turn SELECT with a function layer held, or tap both octave buttons together; GLO + A♯3 changes tempo without opening this overlay.",
   "what_it_is": "The tempo fills the body for about 1.5 seconds.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "871-879",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L871-L879"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1680-1682",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1680-L1682"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_layers.c",
     "lines": "484-485",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L484-L485"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1003-1007",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1003-L1007"
    }
   ]
  },
  {
   "id": "confirmation",
   "name": "Confirmation question",
   "how_to_get_there": "Request an operation that needs confirmation, such as replacing a saved project.",
   "what_it_is": "A question names the affected work and its confirmation button; another button cancels, and four seconds without confirmation cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move.c",
     "lines": "848-859",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L848-L859"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "17-20",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L17-L20"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "871-887",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L871-L887"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Hold OCT− and OCT+ while switching on.",
   "what_it_is": "Assign each panel button and encoder; thirty seconds without input abandons the new assignments.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1938-1976",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1938-L1976"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1980-2005",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1980-L2005"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/main.c",
     "lines": "182-185",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L182-L185"
    }
   ]
  },
  {
   "id": "usb_rescue",
   "name": "USB rescue",
   "how_to_get_there": "Hold physical OCT− alone while switching on, or let the guard detect two failed starts.",
   "what_it_is": "A recovery path runs the USB installer with audio and normal project loading off.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/recovery.c",
     "lines": "52-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/recovery.c#L52-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/bootguard.h",
     "lines": "15-29",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/bootguard.h#L15-L29"
    }
   ]
  },
  {
   "id": "update_countdown",
   "name": "Update countdown",
   "how_to_get_there": "While stopped, hold OCT− and OCT+ for five seconds; release before then to cancel.",
   "what_it_is": "After two seconds the countdown appears; finishing the five-second hold enters UBOOT without saving newer work, so edits made since the last successful autosave or separate save can be lost.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/main.c",
     "lines": "211-239",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L211-L239"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "79-91",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L79-L91"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/main.c",
     "lines": "228-238",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L228-L238"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/felucca.c",
     "lines": "51-52",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L52"
    }
   ]
  },
  {
   "id": "drum_play",
   "name": "Drum keys",
   "how_to_get_there": "Select a drum track.",
   "what_it_is": "The keyboard plays sixteen drum lanes; black keys share the lane to their left.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/seq.c",
     "lines": "1692-1705",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
    }
   ]
  },
  {
   "id": "chord_play",
   "name": "Chord keys",
   "how_to_get_there": "Hold SEL and turn KNOB 1 to enable chords on a synth track.",
   "what_it_is": "White keys play chords; black keys alter chords held on that track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/seq.c",
     "lines": "1707-1748",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
    }
   ]
  },
  {
   "id": "punch",
   "name": "Punch effects held",
   "how_to_get_there": "Hold FX.",
   "what_it_is": "A held key puts one effect across the mix.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/seq.c",
     "lines": "1633-1640",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
    }
   ]
  },
  {
   "id": "erase",
   "name": "Erase held",
   "how_to_get_there": "Hold EDIT.",
   "what_it_is": "Keys erase notes or drum lanes; black drum keys switch the white keys to lane muting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/seq.c",
     "lines": "1650-1682",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
    }
   ]
  },
  {
   "id": "roll",
   "name": "Repeat held",
   "how_to_get_there": "Hold ARP.",
   "what_it_is": "Keys repeat at the repeat rate while held.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/seq.c",
     "lines": "1692-1721",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
    }
   ]
  },
  {
   "id": "mix_hold",
   "name": "Mix keys held",
   "how_to_get_there": "Hold GLO.",
   "what_it_is": "White keys mute or solo tracks, and four low black keys handle fills, tempo and MIDI learning; enable learn, release GLO, turn a track or sound knob and send a CC, with mappings lost at power-off unless a separate settings write commits them.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_layers.c",
     "lines": "469-490",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui.c",
     "lines": "720-747",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L747"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui.c",
     "lines": "758-783",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L758-L783"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/felucca.c",
     "lines": "51-52",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L52"
    }
   ]
  },
  {
   "id": "clips_hold",
   "name": "Clip keys held",
   "how_to_get_there": "Hold SAVE.",
   "what_it_is": "White keys launch one track clip or the same clip number across every track.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "745-757",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
    }
   ]
  },
  {
   "id": "free_take",
   "name": "Free take",
   "how_to_get_there": "Arm REC in an empty project, then play a note.",
   "what_it_is": "The first unclocked take sets the loop length and tempo when closed.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/seq.c",
     "lines": "1349-1357",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1357"
    }
   ]
  },
  {
   "id": "insert_drive",
   "name": "Insert: drive",
   "how_to_get_there": "Open SOUND INSERT on a synth or drum track and choose SOFT, HARD, FOLD or FUZZ.",
   "what_it_is": "The insert’s three type-specific values.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/params.c",
     "lines": "201-214",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
    }
   ]
  },
  {
   "id": "insert_crush",
   "name": "Insert: crush",
   "how_to_get_there": "Open SOUND INSERT on a synth or drum track and choose CRUSH.",
   "what_it_is": "The insert’s three type-specific values.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/params.c",
     "lines": "201-214",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
    }
   ]
  },
  {
   "id": "insert_sweep",
   "name": "Insert: sweep",
   "how_to_get_there": "Open SOUND INSERT on a synth or drum track and choose PHASR, FLANG or CHOR.",
   "what_it_is": "The insert’s three type-specific values.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/params.c",
     "lines": "201-214",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
    }
   ]
  },
  {
   "id": "settings_metronome",
   "name": "Settings: METRONOME",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select METRONOME.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "settings_count_in",
   "name": "Settings: COUNT IN",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select COUNT IN.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "settings_record_quant",
   "name": "Settings: REC QUANT",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select REC QUANT.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "settings_clock",
   "name": "Settings: CLOCK IN",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select CLOCK IN.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "settings_midi_out",
   "name": "Settings: MIDI OUT",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select MIDI OUT.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "settings_midi_in",
   "name": "Settings: MIDI IN",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select MIDI IN.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "settings_lights",
   "name": "Settings: LIGHTS",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select LIGHTS.",
   "what_it_is": "The backlight choice changes on screen, but the LEDs do not respond in this build.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "344-345",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L344-L345"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "395-396",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L395-L396"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1295-1300",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1295-L1300"
    }
   ]
  },
  {
   "id": "settings_key_lights",
   "name": "Settings: KEY LIGHTS",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select KEY LIGHTS.",
   "what_it_is": "The key-light choice changes on screen, but the key LEDs do not respond in this build.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "344-345",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L344-L345"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "395-396",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L395-L396"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "1295-1300",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1295-L1300"
    }
   ]
  },
  {
   "id": "settings_usb_audio",
   "name": "Settings: USB AUDIO",
   "how_to_get_there": "Hold HOME to reach SETTINGS, then use ALGORITHM to select USB AUDIO.",
   "what_it_is": "KNOB 1 edits the selected setting.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "224-225",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L224-L225"
    }
   ]
  },
  {
   "id": "macro_analog",
   "name": "ANALOG macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_analog.c",
     "lines": "161-175",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_analog.c#L161-L175"
    }
   ]
  },
  {
   "id": "macro_digital",
   "name": "DIGITAL macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_digital.c",
     "lines": "145-159",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_digital.c#L145-L159"
    }
   ]
  },
  {
   "id": "macro_phase",
   "name": "PHASE macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phase.c",
     "lines": "185-199",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phase.c#L185-L199"
    }
   ]
  },
  {
   "id": "macro_sample",
   "name": "SAMPLE macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_sample.c",
     "lines": "204-218",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_sample.c#L204-L218"
    }
   ]
  },
  {
   "id": "macro_formant",
   "name": "FORMANT macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_formant.c",
     "lines": "227-241",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_formant.c#L227-L241"
    }
   ]
  },
  {
   "id": "macro_trio",
   "name": "TRIO macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_trio.c",
     "lines": "380-394",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_trio.c#L380-L394"
    }
   ]
  },
  {
   "id": "macro_drawbar",
   "name": "DRAWBAR macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "283-297",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_drawbar.c#L283-L297"
    }
   ]
  },
  {
   "id": "macro_grain",
   "name": "GRAIN macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_grain.c",
     "lines": "444-458",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_grain.c#L444-L458"
    }
   ]
  },
  {
   "id": "macro_fm6",
   "name": "FM6 macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_fm6.c",
     "lines": "372-387",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_fm6.c#L372-L387"
    }
   ]
  },
  {
   "id": "macro_noise",
   "name": "NOISE macros",
   "how_to_get_there": "Select this synth engine on SOUND and open PLAY or SOUND’s first page.",
   "what_it_is": "KNOB 1–4 follow this engine’s four macros.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_noise.c",
     "lines": "259-280",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_noise.c#L259-L280"
    }
   ]
  },
  {
   "id": "steps_held",
   "name": "SEQ with step keys held",
   "how_to_get_there": "Hold SEQ and one or more white step keys.",
   "what_it_is": "Edit the held steps; releasing a changed step keeps it.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_layers.c",
     "lines": "208-276",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L208-L276"
    }
   ]
  },
  {
   "id": "macro_lofi_other",
   "name": "LOFI other waves without STEP chip",
   "how_to_get_there": "Choose a LOFI sound with these wave and chip settings, then open PLAY or SOUND’s first page.",
   "what_it_is": "The wave and chip change the macro names.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_lofi.c",
     "lines": "47-56",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
    }
   ]
  },
  {
   "id": "macro_lofi_other_step",
   "name": "LOFI other waves with STEP chip",
   "how_to_get_there": "Choose a LOFI sound with these wave and chip settings, then open PLAY or SOUND’s first page.",
   "what_it_is": "The wave and chip change the macro names.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_lofi.c",
     "lines": "47-56",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
    }
   ]
  },
  {
   "id": "macro_lofi_wram",
   "name": "LOFI WRAM without STEP chip",
   "how_to_get_there": "Choose a LOFI sound with these wave and chip settings, then open PLAY or SOUND’s first page.",
   "what_it_is": "The wave and chip change the macro names.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_lofi.c",
     "lines": "47-56",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
    }
   ]
  },
  {
   "id": "macro_lofi_wram_step",
   "name": "LOFI WRAM with STEP chip",
   "how_to_get_there": "Choose a LOFI sound with these wave and chip settings, then open PLAY or SOUND’s first page.",
   "what_it_is": "The wave and chip change the macro names.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_lofi.c",
     "lines": "47-56",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
    }
   ]
  },
  {
   "id": "macro_phys_modal",
   "name": "PHYS MODAL macros",
   "how_to_get_there": "Choose a PHYS MODAL sound, then open PLAY or SOUND’s first page.",
   "what_it_is": "The four macros are structure, brightness, damping and position.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "54-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "62-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L62-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "284",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L284"
    }
   ]
  },
  {
   "id": "macro_phys_strng",
   "name": "PHYS STRNG macros",
   "how_to_get_there": "Choose a PHYS STRNG sound, then open PLAY or SOUND’s first page.",
   "what_it_is": "The four macros are structure, brightness, damping and position.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "54-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "62-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L62-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "284",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L284"
    }
   ]
  },
  {
   "id": "macro_phys_memb",
   "name": "PHYS MEMB macros",
   "how_to_get_there": "Choose a PHYS MEMB sound, then open PLAY or SOUND’s first page.",
   "what_it_is": "The first macro becomes harmonicity; the others remain brightness, damping and position.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "54-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "62-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L62-L69"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "284",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L284"
    }
   ]
  },
  {
   "id": "macro_phys_symp",
   "name": "PHYS SYMP macros",
   "how_to_get_there": "Choose a PHYS SYMP sound, then open PLAY or SOUND’s first page.",
   "what_it_is": "The model determines the first and fourth macro names.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/eng_phys.c",
     "lines": "54-69",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
    }
   ]
  },
  {
   "id": "insert_off",
   "name": "Insert off",
   "how_to_get_there": "Open a SOUND INSERT page and set its type to OFF.",
   "what_it_is": "The three stored insert values can change, but no insert is applied.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/params.c",
     "lines": "210-214",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L210-L214"
    }
   ]
  },
  {
   "id": "midi_learn",
   "name": "MIDI learning",
   "how_to_get_there": "Hold GLO and press C♯4, release GLO, turn a track or sound parameter knob, then send a CC.",
   "what_it_is": "The display asks for a knob, then a CC, then names the learned mapping or reports refusal; learned mappings need a separate settings write to survive power-off.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui.c",
     "lines": "720-747",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L747"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui.c",
     "lines": "758-783",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L758-L783"
    }
   ]
  },
  {
   "id": "update_progress",
   "name": "Update progress",
   "how_to_get_there": "Send a firmware update from the author’s device page while Move is running.",
   "what_it_is": "The update display follows package checking, loader staging, confirmation and restart, or reports a failure code.",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/felucca.c",
     "lines": "160-185",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L160-L185"
    }
   ]
  }
 ],
 "controls": {
  "screen": [
   {
    "mode": "play",
    "gesture": "shows",
    "action": "Shows the selected sound, engine, bar and beat, a circular step indicator, and all eight tracks with activity, mute and solo marks.",
    "short_label": "PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "280-325",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L280-L325"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "787-795",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L787-L795"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "shows",
    "action": "Shows eight track cards with sound names, selection, mute, solo, recording-arm and activity marks.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "327-354",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L327-L354"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "787-795",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L787-L795"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "shows",
    "action": "Shows a synth note overview or drum lanes above sixteen level bars, with the held step, locks, nudges, playhead and page marks.",
    "short_label": "SEQUENCER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "356-434",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L356-L434"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "435-441",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L435-L441"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "840-846",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840-L846"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "shows",
    "action": "Shows the cursor and playhead on a piano roll, note lengths, ties, rests, accents, slide ramps and page marks, with scale rows when scale lock is on.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "454-525",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L454-L525"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "840-846",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840-L846"
     }
    ]
   },
   {
    "mode": "groove",
    "gesture": "shows",
    "action": "Shows the template, swing, quantize, groove and humanize percentages, plus eight timing and velocity marks.",
    "short_label": "GROOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "610-650",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L610-L650"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "840-840",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "shows",
    "action": "Shows an eight-track by six-clip grid with the selected slot framed, playing clips filled, queued clips blinking and stored clips dim.",
    "short_label": "CLIPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "652-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L652-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "834-838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L834-L838"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "shows",
    "action": "Shows eight strips with pan, level, activity, mute and solo marks, plus the fixed title text MASTER -2 DB.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "707-744",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L707-L744"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "819-819",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L819"
     }
    ]
   },
   {
    "mode": "sound",
    "gesture": "shows",
    "action": "Shows the engine, sound category and position, with the previous, selected and next sound names.",
    "short_label": "PRESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "sound_env",
    "gesture": "shows",
    "action": "Shows the engine and an envelope curve with attack, decay, sustain and release points.",
    "short_label": "ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "sound_lfo",
    "gesture": "shows",
    "action": "Shows the engine and large rate, wave, pitch-depth and filter-depth values.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "sound_sync",
    "gesture": "shows",
    "action": "Shows large LFO sync, trigger, polarity and envelope-sync values.",
    "short_label": "SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "sound_fx",
    "gesture": "shows",
    "action": "Shows large drive, chorus, delay and reverb values.",
    "short_label": "SENDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "sound_insert",
    "gesture": "shows",
    "action": "Shows the insert type and its three named parameters as large values.",
    "short_label": "INSERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "sound_filter",
    "gesture": "shows",
    "action": "Shows insert mix and, on the ANALOG engine, filter type.",
    "short_label": "INSERT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "drum_sound",
    "gesture": "shows",
    "action": "Shows the selected kit, its place in the kit list, and kit, level, pan and filter values.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "794-795",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L795"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "drum_insert",
    "gesture": "shows",
    "action": "Shows the drum track’s insert type and three named insert parameters.",
    "short_label": "DRUM INSERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "794-795",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L795"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "drum_insert_2",
    "gesture": "shows",
    "action": "Shows the drum track’s insert mix as a large value.",
    "short_label": "DRUM MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "761-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L761-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "794-795",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L795"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1852-1856",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1852-L1856"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "shows",
    "action": "Shows sixteen white-key effect tiles, with the current effect highlighted.",
    "short_label": "WHITE FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "800-827",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "180-181",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1858-1859",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
     }
    ]
   },
   {
    "mode": "perform_black",
    "gesture": "shows",
    "action": "Shows eleven black-key effect tiles, with the current effect highlighted.",
    "short_label": "BLACK FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "800-827",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "180-181",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1858-1859",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "shows",
    "action": "Shows the texture source, level, tone and movement as large values.",
    "short_label": "TEXTURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "800-827",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "180-181",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1858-1859",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
     }
    ]
   },
   {
    "mode": "texture_2",
    "gesture": "shows",
    "action": "Shows texture rate, playback condition and ducking as large values.",
    "short_label": "TEXTURE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "800-827",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L800-L827"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "180-181",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L180-L181"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1858-1859",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1858-L1859"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "action": "Shows each project slot as saved or empty, the selected slot, and SAVE and EDIT button reminders.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "829-845",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L829-L845"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "889-902",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L889-L902"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1890-1904",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1890-L1904"
     }
    ]
   },
   {
    "mode": "settings",
    "gesture": "shows",
    "action": "Shows a scrolling settings list covering metronome, count-in, recording boundary, clock, MIDI, lights and USB audio, followed by battery, audio load and version.",
    "short_label": "SETTINGS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "829-846",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L829-L846"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "116-117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L116-L117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "223-225",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L223-L225"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1905-1912",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1905-L1912"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "shows",
    "action": "Shows a four-by-four step grid with note or step numbers, levels, ties, accents, lock or nudge dots, playhead and held-step frames.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "538-579",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L538-L579"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1572-1610",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1572-L1610"
     }
    ]
   },
   {
    "mode": "key",
    "gesture": "shows",
    "action": "Shows eight track chips and sixteen white-key note or chord tiles, with the root filled, scale notes raised and the other notes dim.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "580-608",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L580-L608"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1572-1580",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1572-L1580"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1611-1641",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1611-L1641"
     }
    ]
   },
   {
    "mode": "knob_focus",
    "gesture": "shows",
    "action": "Shows the parameter name, value, unit and gauge while the bottom strip keeps the four knob values.",
    "short_label": "VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "256-277",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L256-L277"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "881-899",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L881-L899"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "17-19",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L17-L19"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1700-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1700-L1705"
     }
    ]
   },
   {
    "mode": "tempo_overlay",
    "gesture": "shows",
    "action": "Shows large BPM numerals and either the octave-button tap hint or FOLLOWS CLOCK IN for an external clock.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "871-879",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L871-L879"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1680-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1680-L1682"
     }
    ]
   },
   {
    "mode": "confirmation",
    "gesture": "shows",
    "action": "Shows the action, its consequence, the button that confirms and an ELSE CANCEL choice.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "848-859",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L848-L859"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "17-20",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "871-887",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L871-L887"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "Names the next button to press or encoder to turn clockwise during hardware calibration.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1938-1976",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1938-L1976"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1980-2005",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1980-L2005"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "182-185",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L182-L185"
     }
    ]
   },
   {
    "mode": "usb_rescue",
    "gesture": "shows",
    "action": "Shows SLOOP USB RESCUE, a USB connection prompt, installer or unknown-flash status, and AUDIO OFF.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/recovery.c",
      "lines": "52-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/recovery.c#L52-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/bootguard.h",
      "lines": "15-29",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/bootguard.h#L15-L29"
     }
    ]
   },
   {
    "mode": "update_countdown",
    "gesture": "shows",
    "action": "Shows the countdown and then UBOOT after five seconds, without saving edits made since the last successful autosave or separate save.",
    "short_label": "UBOOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "211-239",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L211-L239"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "79-91",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L79-L91"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "228-238",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L228-L238"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/felucca.c",
      "lines": "51-52",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L52"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "At startup, shows FM1 MOVE, eight coloured track marks and a 0.3 version line before the normal screen.",
    "short_label": "STARTUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "2008-2024",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L2008-L2024"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "146-152",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L146-L152"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows short messages for operations, limits and warnings, including a full clip pool or low battery.",
    "short_label": "MESSAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "861-866",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L861-L866"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "79-91",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L79-L91"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "313-325",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L313-L325"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "The status bar shows the selected track, tempo, transport or count-in, recording state, groove, quantize and battery bars; USB animates the bars without reporting charge completion.",
    "short_label": "STATUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move.c",
      "lines": "155-207",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move.c#L155-L207"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1677-1688",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1677-L1688"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "On a fatal fault, shows FELUCCA CRASH with diagnostic numbers for four seconds before restarting.",
    "short_label": "FAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "76-96",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L76-L96"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows UBOOT (USB) when a USB updater request enters the bootloader.",
    "short_label": "USB UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "256-267",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L256-L267"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "shows",
    "action": "Shows LEARN: TURN A KNOB when learning starts, with no previous parameter selected.",
    "short_label": "PICK KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "720-728",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L728"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "shows",
    "action": "After an eligible knob turn, names the track and parameter and asks SEND A CC.",
    "short_label": "SEND CC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "730-747",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L730-L747"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "shows",
    "action": "Names the learned CC and parameter, or reports LEARN FULL or CC NOT LEARNABLE; toggling learning off shows LEARN DONE, and new mappings still need a separate settings write.",
    "short_label": "CC LEARNED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "758-783",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L758-L783"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "720-728",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L728"
     }
    ]
   },
   {
    "mode": "update_progress",
    "gesture": "shows",
    "action": "Shows UPDATE with PACKAGE, CHECK HEAD, LOADER, CONFIRM or RESTART as the transfer advances, then a numbered failure if it fails.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/felucca.c",
      "lines": "160-185",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L160-L185"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/felucca.c",
      "lines": "29-31",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L29-L31"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ota.c",
      "lines": "373-377",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ota.c#L373-L377"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens PERFORM, or advances its four pages when already there.",
    "short_label": "PERFORM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "792-798",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L792-L798"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes keys punch effects and KNOB 1–4 adjust the performance mix.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Releases the FX layer and ends its held punch effect.",
    "short_label": "LEAVE PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens TRACKS.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "793-799",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L793-L799"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes white keys 1–8 select tracks and all remaining keys set the root shared by synth tracks.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "confirmation",
    "gesture": "press",
    "action": "Confirms the displayed operation when the prompt names this button, while another button cancels and a four-second timeout changes nothing.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "871-888",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L871-L888"
     }
    ]
   },
   {
    "mode": "key",
    "gesture": "release",
    "action": "Releases the track and root selection layer.",
    "short_label": "LEAVE KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use jumps to SOUND ENVELOPE on a synth track, or KIT on a drum track.",
    "short_label": "ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "794-800",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L794-L800"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use jumps to SOUND LFO on a synth track, or KIT on a drum track.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "795-801",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L795-L801"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens SOUND, or advances its sound pages when already there.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "817-823",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L817-L823"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes keys erase notes or drum lanes and knobs edit the pattern.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "release",
    "action": "An unused tap under 450 ms copies the playing clip into the selected slot in memory, immediately if empty or after EDIT confirms replacement, with no undo, later idle autosave or project SAVE making it persistent, and a refusal if the clip bank has no room.",
    "short_label": "COPY CLIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "758-772",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L758-L772"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "201-229",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L201-L229"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "An unused tap under 450 ms clears the cursor step in memory and advances the cursor without asking, with EDIT + OCT− available to undo before a later idle autosave makes it persistent.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "810-815",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L810-L815"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "release",
    "action": "A tap under 450 ms asks to load the chosen occupied slot; another EDIT replaces the current work without undo only while stopped, while playback causes the confirmed load to fail without replacing it.",
    "short_label": "LOAD PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "796-804",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L796-L804"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "430-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L430-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/project.c",
      "lines": "694-712",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L694-L712"
     }
    ]
   },
   {
    "mode": "confirmation",
    "gesture": "press",
    "action": "Confirms the displayed operation when the prompt names this button, while another button cancels and a four-second timeout changes nothing.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "871-888",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L871-L888"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Releases the erase layer and returns drum keys from lane muting to their ordinary job.",
    "short_label": "LEAVE ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens MIXER.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "819-825",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L819-L825"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes white keys mute or solo tracks and low black keys control fills, tempo and MIDI learning; enable learn with C♯4, release GLO, turn a track or sound knob and send a CC, with new mappings remaining unsaved until a separate settings write.",
    "short_label": "MIX KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "720-747",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L747"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "758-783",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L758-L783"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Releases the mute and solo key layer.",
    "short_label": "LEAVE MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens CLIPS with its cursor on the playing clip.",
    "short_label": "CLIPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "838-844",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L838-L844"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes white keys 1–6 launch track clips and white keys 9–14 launch scenes.",
    "short_label": "CLIP KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "release",
    "action": "An unused tap under 450 ms launches the selected clip now when stopped or at the next bar when running.",
    "short_label": "LAUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "834-836",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L834-L836"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-193",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L193"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "release",
    "action": "A tap under 450 ms saves the selected project slot immediately while stopped, with no undo and no question for an empty slot, or after another SAVE confirms replacing an occupied slot, unless the project is too dense or SLOOP’s fourth sample blocks the save.",
    "short_label": "SAVE PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "820-831",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L820-L831"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "425-428",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L425-L428"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/project.c",
      "lines": "676-709",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L676-L709"
     }
    ]
   },
   {
    "mode": "confirmation",
    "gesture": "press",
    "action": "Confirms the displayed operation when the prompt names this button, while another button cancels and a four-second timeout changes nothing.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "871-888",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L871-L888"
     }
    ]
   },
   {
    "mode": "clips_hold",
    "gesture": "release",
    "action": "Releases the clip and scene key layer.",
    "short_label": "LEAVE CLIPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens GROOVE, or switches its two pages.",
    "short_label": "GROOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "840-846",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L840-L846"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes keys repeat notes or drums at the repeat rate.",
    "short_label": "REPEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Releases the repeat layer and ends its repeating notes even if their keys remain held.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap under 450 ms with no key or knob use opens SEQUENCER, or switches between its overview and synth STEP page.",
    "short_label": "SEQUENCER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "841-847",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L841-L847"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "948-961",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L948-L961"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "459-472",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L459-L472"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Makes white keys edit sixteen steps and the first four black keys pick step pages.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-923",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L923"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "42-65",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L42-L65"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "187-202",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L187-L202"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "Releases the held step layer.",
    "short_label": "LEAVE STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "910-915",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L910-L915"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1829-1838",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1829-L1838"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A tap opens PLAY after you let go.",
    "short_label": "PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "889-909",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L889-L909"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "791",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L791"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Holding for over 700 ms opens PROJECT, or alternates PROJECT and SETTINGS if the system pages are open.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "889-909",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L889-L909"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "clips",
    "gesture": "press",
    "action": "Asks to empty the selected clip in memory, including its live pattern if it is playing, and a second REC confirms with no undo before later idle autosave or project SAVE makes it persistent.",
    "short_label": "CLEAR CLIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "774-784",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L774-L784"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "231-248",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L231-L248"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "975-977",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L975-L977"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Asks to delete the selected occupied project slot, and another REC erases it at once while stopped without undo, although confirmation while playing shows DELETED without erasing it.",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "968-974",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L968-L974"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "433-436",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L433-L436"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/project.c",
      "lines": "714-721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L714-L721"
     }
    ]
   },
   {
    "mode": "confirmation",
    "gesture": "press",
    "action": "Confirms the displayed operation when the prompt names this button, while another button cancels and a four-second timeout changes nothing.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "871-888",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L871-L888"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "Arms the selected track while stopped, toggles recording while playing at the configured record boundary, or cancels a pending boundary change.",
    "short_label": "RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "979-1002",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L979-L1002"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "press",
    "action": "Closes the free take into the selected track in memory and derives the loop and tempo, without a flash save.",
    "short_label": "CLOSE TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1044-1091",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1044-L1091"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1105-1118",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1105-L1118"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Starts or stops playback, with PLAY starting an armed recording and its configured count-in.",
    "short_label": "TRANSPORT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "964-967",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L964-L967"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "2685-2722",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L2685-L2722"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "press",
    "action": "Drops the free take and leaves the previous pattern unchanged.",
    "short_label": "DROP TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1105-1118",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1105-L1118"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Moves the synth keyboard one octave down, within three octaves of its centre.",
    "short_label": "OCT −",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1032-1039",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1032-L1039"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "Makes drum-key hits ghost while held, with OCT− taking priority when both are held.",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1573-1579",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1573-L1579"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "With no function layer held, taps the tempo and centres the synth keyboard octave.",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1003-1008",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1003-L1008"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1032-1039",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1032-L1039"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "335-352",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L335-L352"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Undoes the latest available pattern edit without asking or writing flash.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1014-1024",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1014-L1024"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Moves to the previous sixteen-step page when no step key is held, or clears held steps’ locks, nudge and fill condition in memory without asking, with undo available.",
    "short_label": "STEP CLEAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1025-1031",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1025-L1031"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "290-332",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L290-L332"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Pushes every track’s reverb send to full while held.",
    "short_label": "REV THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "916-924",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L916-L924"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/fx.c",
      "lines": "715",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fx.c#L715"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/fx.c",
      "lines": "1095-1097",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fx.c#L1095-L1097"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/fx.c",
      "lines": "206-207",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fx.c#L206-L207"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Moves every note of the selected synth pattern down into its current scale in memory without asking, with undo available, and does nothing if scale lock is off.",
    "short_label": "FIT TO SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1009-1013",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1009-L1013"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "713-735",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L713-L735"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down",
    "action": "Starts USB rescue when physical OCT− is held alone, without loading or writing projects or settings.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/recovery.c",
      "lines": "41-59",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/recovery.c#L41-L59"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/bootguard.h",
      "lines": "27-30",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/bootguard.h#L27-L30"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "324-330",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L324-L330"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts calibration, restoring the former panel mapping after a thirty-second timeout, then writes settings only when they differ from the accepted record or no record was accepted, without a question or undo.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "182-185",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L182-L185"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1937-2005",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1937-L2005"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/project.c",
      "lines": "1031-1046",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1031-L1046"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Moves the synth keyboard one octave up, within three octaves of its centre.",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1032-1039",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1032-L1039"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "Makes drum-key hits hard while held, with OCT− taking priority when both are held.",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1573-1579",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1573-L1579"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "action": "With no function layer held, taps the tempo and centres the synth keyboard octave.",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1003-1008",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1003-L1008"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1032-1039",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1032-L1039"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "335-352",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L335-L352"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Redoes the latest available pattern edit without asking or writing flash.",
    "short_label": "REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1014-1024",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1014-L1024"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Moves to the next sixteen-step page when no step key is held, or cycles the held steps between ordinary, fill-only and no-fill playback.",
    "short_label": "STEP FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1025-1031",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1025-L1031"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "290-332",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L290-L332"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Pushes every track’s delay send to full and raises echo feedback while held.",
    "short_label": "ECHO THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "916-924",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L916-L924"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/fx.c",
      "lines": "715",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fx.c#L715"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/fx.c",
      "lines": "1095-1097",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fx.c#L1095-L1097"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/fx.c",
      "lines": "206-207",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fx.c#L206-L207"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts calibration, restoring the former panel mapping after a thirty-second timeout, then writes settings only when they differ from the accepted record or no record was accepted, without a question or undo.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "182-185",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L182-L185"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1937-2005",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1937-L2005"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/project.c",
      "lines": "1031-1046",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1031-L1046"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays F3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the kick lane on the selected drum track and feeds an armed recording.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops a beat-sized slice across the mix while this key remains held.",
    "short_label": "LOOP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L65-L86"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases kick or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 1 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 1.",
    "short_label": "TRACK 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 1.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches clip 1 on the selected track now when stopped or at the next bar when running.",
    "short_label": "CLIP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays F♯3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the kick lane on the selected drum track and feeds an armed recording.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Removes the low band across the mix while this key remains held.",
    "short_label": "KILL LOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "164-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L164-L195"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step page 1 if the pattern reaches that page.",
    "short_label": "PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets F♯ as the root for every synth track.",
    "short_label": "ROOT F♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Enables fill-only steps while held and suppresses no-fill steps.",
    "short_label": "FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Flips a major third to minor or a minor third to major in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "THIRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays G3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the kick 2 lane on the selected drum track and feeds an armed recording.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops a half-beat slice across the mix while this key remains held.",
    "short_label": "LOOP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L65-L86"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases kick 2 or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 2 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 2.",
    "short_label": "TRACK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 2.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches clip 2 on the selected track now when stopped or at the next bar when running.",
    "short_label": "CLIP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays G♯3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the kick 2 lane on the selected drum track and feeds an armed recording.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Removes the middle band across the mix while this key remains held.",
    "short_label": "KILL MID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "164-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L164-L195"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step page 2 if the pattern reaches that page.",
    "short_label": "PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets G♯ as the root for every synth track.",
    "short_label": "ROOT G♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Arms a fill for the next bar, or cancels it when pressed again.",
    "short_label": "NEXT FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Adds the scale seventh when the chord has room in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "ADD 7TH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays A3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the snare lane on the selected drum track and feeds an armed recording.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops a quarter-beat slice across the mix while this key remains held.",
    "short_label": "LOOP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L65-L86"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases snare or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 3 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 3.",
    "short_label": "TRACK 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 3.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches clip 3 on the selected track now when stopped or at the next bar when running.",
    "short_label": "CLIP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays A♯3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the snare lane on the selected drum track and feeds an armed recording.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Removes the high band across the mix while this key remains held.",
    "short_label": "KILL HIGH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "164-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L164-L195"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step page 3 if the pattern reaches that page.",
    "short_label": "PAGE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets A♯ as the root for every synth track.",
    "short_label": "ROOT A♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Taps the tempo from successive presses.",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Replaces the third with the scale fourth in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "SUS4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays B3 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the clap lane on the selected drum track and feeds an armed recording.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops an eighth-beat slice across the mix while this key remains held.",
    "short_label": "LOOP 32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L65-L86"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases clap or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 4 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 4.",
    "short_label": "TRACK 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 4.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches clip 4 on the selected track now when stopped or at the next bar when running.",
    "short_label": "CLIP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays C4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the hat lane on the selected drum track and feeds an armed recording.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Repeats a sixth-beat slice across the mix while this key remains held.",
    "short_label": "STUTTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L65-L86"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases hat or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 5 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 5.",
    "short_label": "TRACK 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 5.",
    "short_label": "MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches clip 5 on the selected track now when stopped or at the next bar when running.",
    "short_label": "CLIP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays C♯4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the hat lane on the selected drum track and feeds an armed recording.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Pulls recent sound backwards with a slowing and reversing motion across the mix while this key remains held.",
    "short_label": "REWIND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "345-357",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L345-L357"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step page 4 if the pattern reaches that page.",
    "short_label": "PAGE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets C♯ as the root for every synth track.",
    "short_label": "ROOT C♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles MIDI learning; after enabling it, release GLO, turn a track or sound parameter knob and send a CC, remembering that new mappings disappear at power-off unless calibration or an explicit settings, SYN-kit or MIDI send commits them.",
    "short_label": "MIDI LEARN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "720-747",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L747"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui.c",
      "lines": "758-783",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L758-L783"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/felucca.c",
      "lines": "51-52",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L52"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/project.c",
      "lines": "1231-1243",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1231-L1243"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Adds the scale ninth, replacing the fifth when four notes are already present in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "ADD 9TH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays D4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the open hat lane on the selected drum track and feeds an armed recording.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Replays recent sound backwards across the mix while this key remains held.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "108-133",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L108-L133"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases open hat or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 6 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 6.",
    "short_label": "TRACK 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 6.",
    "short_label": "MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches clip 6 on the selected track now when stopped or at the next bar when running.",
    "short_label": "CLIP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays D♯4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the open hat lane on the selected drum track and feeds an armed recording.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Raises recent sound an octave across the mix while this key remains held.",
    "short_label": "OCT UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "359-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L359-L365"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets D♯ as the root for every synth track.",
    "short_label": "ROOT D♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Raises the lowest chord note by an octave in held synth chords, combining with other black-key modifiers and applying to POWER chords too.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays E4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the pedal lane on the selected drum track and feeds an armed recording.",
    "short_label": "PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Slows recent sound to a stop across the mix while this key remains held.",
    "short_label": "STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "108-133",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L108-L133"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases pedal or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 7 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 7.",
    "short_label": "TRACK 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 7.",
    "short_label": "MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays F4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the rim lane on the selected drum track and feeds an armed recording.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Replays recent sound at half speed across the mix while this key remains held.",
    "short_label": "HALF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "108-133",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L108-L133"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases rim or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 8 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Selects track 8.",
    "short_label": "TRACK 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles mute on track 8.",
    "short_label": "MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays F♯4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the rim lane on the selected drum track and feeds an armed recording.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Sweeps a short delay through the mix across the mix while this key remains held.",
    "short_label": "FLANGER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "367-377",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L367-L377"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets F♯ as the root for every synth track.",
    "short_label": "ROOT F♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Flips a major third to minor or a minor third to major in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "THIRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays G4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the snare 2 lane on the selected drum track and feeds an armed recording.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Sweeps away high frequencies across the mix while this key remains held.",
    "short_label": "LOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "274-313",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L274-L313"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases snare 2 or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 9 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets G as the root for every synth track.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 1.",
    "short_label": "SOLO 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches scene 1 across every track now when stopped or at the next bar when running, silencing a track whose clip is empty.",
    "short_label": "SCENE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays G♯4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the snare 2 lane on the selected drum track and feeds an armed recording.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Moves a mono mix between left and right across the mix while this key remains held.",
    "short_label": "AUTO-PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "378-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L378-L385"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets G♯ as the root for every synth track.",
    "short_label": "ROOT G♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Adds the scale seventh when the chord has room in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "ADD 7TH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays A4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the low tom lane on the selected drum track and feeds an armed recording.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Sweeps away low frequencies across the mix while this key remains held.",
    "short_label": "HIGH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "274-313",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L274-L313"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases low tom or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 10 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets A as the root for every synth track.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 2.",
    "short_label": "SOLO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches scene 2 across every track now when stopped or at the next bar when running, silencing a track whose clip is empty.",
    "short_label": "SCENE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays A♯4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the low tom lane on the selected drum track and feeds an armed recording.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds a wash of reverb across the mix while this key remains held.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "386-392",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L386-L392"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets A♯ as the root for every synth track.",
    "short_label": "ROOT A♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Replaces the third with the scale fourth in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "SUS4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays B4 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the hi tom lane on the selected drum track and feeds an armed recording.",
    "short_label": "HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Gives the mix a narrow telephone tone across the mix while this key remains held.",
    "short_label": "PHONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "310-315",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L310-L315"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases hi tom or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 11 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets B as the root for every synth track.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 3.",
    "short_label": "SOLO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches scene 3 across every track now when stopped or at the next bar when running, silencing a track whose clip is empty.",
    "short_label": "SCENE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays C5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the crash lane on the selected drum track and feeds an armed recording.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Reduces sample resolution across the mix while this key remains held.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "316-319",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L316-L319"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases crash or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 12 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets C as the root for every synth track.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 4.",
    "short_label": "SOLO 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches scene 4 across every track now when stopped or at the next bar when running, silencing a track whose clip is empty.",
    "short_label": "SCENE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays C♯5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the crash lane on the selected drum track and feeds an armed recording.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops a third-beat slice across the mix while this key remains held.",
    "short_label": "LOOP 8T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L65-L86"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets C♯ as the root for every synth track.",
    "short_label": "ROOT C♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Adds the scale ninth, replacing the fifth when four notes are already present in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "ADD 9TH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays D5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the ride lane on the selected drum track and feeds an armed recording.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Reduces the sample rate across the mix while this key remains held.",
    "short_label": "ALIAS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "320-328",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L320-L328"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases ride or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 13 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets D as the root for every synth track.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 5.",
    "short_label": "SOLO 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches scene 5 across every track now when stopped or at the next bar when running, silencing a track whose clip is empty.",
    "short_label": "SCENE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays D♯5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the ride lane on the selected drum track and feeds an armed recording.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Sums the mix to mono across the mix while this key remains held.",
    "short_label": "MONO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "393-395",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L393-L395"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets D♯ as the root for every synth track.",
    "short_label": "ROOT D♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Raises the lowest chord note by an octave in held synth chords, combining with other black-key modifiers and applying to POWER chords too.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays E5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the shaker lane on the selected drum track and feeds an armed recording.",
    "short_label": "SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Chops the mix on the sixteenth-note grid across the mix while this key remains held.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "329-337",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L329-L337"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases shaker or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 14 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets E as the root for every synth track.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 6.",
    "short_label": "SOLO 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Launches scene 6 across every track now when stopped or at the next bar when running, silencing a track whose clip is empty.",
    "short_label": "SCENE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays F5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the conga lane on the selected drum track and feeds an armed recording.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Adds a dotted-eighth echo across the mix while this key remains held.",
    "short_label": "ECHO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "403-410",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L403-L410"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases conga or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 15 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets F as the root for every synth track.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 7.",
    "short_label": "SOLO 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays F♯5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the conga lane on the selected drum track and feeds an armed recording.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, writes its mapped note into the cursor step unless chord mode or WHITE scale lock silences it; in chord mode it serves any assigned chord modifier instead.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-255",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L255"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1714",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1714"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-680",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L680"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Fades the mix to silence over two beats across the mix while this key remains held.",
    "short_label": "FADE OUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "396-402",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L396-L402"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "For drums, toggles whether white keys remove hits or mute lanes; for synths, erases the playable mapped note or chord as playback reaches it, or across the stopped pattern, in memory for later autosave without asking and with undo available.",
    "short_label": "ERASE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Has no step-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets F♯ as the root for every synth track.",
    "short_label": "ROOT F♯",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Has no mix-layer press action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "release",
    "action": "Ends the held fill when any black key in this layer is released.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "363-365",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L363-L365"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "hold",
    "action": "Flips a major third to minor or a minor third to major in held synth chords, combining with other black-key modifiers except in POWER chord mode.",
    "short_label": "THIRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "326-340",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L326-L340"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "362-432",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L362-L432"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1727",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1727"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this modifier from chords still held on the track.",
    "short_label": "CHORD RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1766-1768",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1766-L1768"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Normally plays G5 on the selected synth track with octave, transposition, scale and chord settings applied, or the matching GM sample-kit key from C2, and feeds an armed recording.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L289"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1349-1366",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1349-L1366"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the notes started by this key, with the arpeggiator’s hold setting able to retain them.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1781-1787",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1781-L1787"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1215-1221",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1215-L1221"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays the cowbell lane on the selected drum track and feeds an armed recording.",
    "short_label": "COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1705"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/drums.c",
      "lines": "68-99",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/drums.c#L68-L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "press",
    "action": "With function buttons released and recording disarmed, enters the mapped note or, in polyphonic chord mode, the sounding chord into the cursor step, allowing four notes in memory while mono mode replaces the note.",
    "short_label": "WRITE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "665-707",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L665-L707"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "678-705",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L678-L705"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With recording disarmed, advances to the next step after every panel key and MIDI note used for entry has been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "709-710",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L709-L710"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Adds a wavering tape-like pitch across the mix while this key remains held.",
    "short_label": "WOBBLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1633-1640",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1633-L1640"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/punch.c",
      "lines": "121-124",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/punch.c#L121-L124"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "release",
    "action": "Ends this key’s punch effect and returns to the dry mix if it is still the most recently chosen effect.",
    "short_label": "FX OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1756-1762",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1756-L1762"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key’s drum lane or playable synth note at the repeat rate while held.",
    "short_label": "REPEAT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1692-1721",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1692-L1721"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "release",
    "action": "Stops this key’s repeat.",
    "short_label": "REPEAT OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1776-1780",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1776-L1780"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s mapped note or chord as playback reaches it, or throughout the pattern when stopped in memory for later autosave, without asking and with undo available; on drums it erases cowbell or toggles its sequencer mute if a black key enabled mute mode.",
    "short_label": "ERASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1650-1682",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1650-L1682"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1171-1182",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1171-L1182"
     }
    ]
   },
   {
    "mode": "erase",
    "gesture": "release",
    "action": "Ends this key’s erasing request; any notes already removed remain changed in memory.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1769-1775",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1769-L1775"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Selects step 16 of the current sixteen-step page and writes the pen note or chord, or the selected drum lane, immediately if the step is empty.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "139-173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L139-L173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L375-L385"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "release",
    "action": "On release, removes the existing synth step or the selected drum sound’s hit unless an edit kept it, clearing locks, nudge and fill only when the step is empty, in memory without asking and with undo available.",
    "short_label": "TOGGLE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-196",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L196"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "174-195",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L174-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets G as the root for every synth track.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-399",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L386-L399"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles solo on track 8.",
    "short_label": "SOLO 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-490",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L469-L490"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Has no clip-layer action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "745-757",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L745-L757"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/clip.c",
      "lines": "180-200",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L180-L200"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a chord whose root follows this white key’s position in the chosen scale, taking C4 as home and applying the chord type and held black-key modifiers.",
    "short_label": "PLAY CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "1707-1748",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L1707-L1748"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "240-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L240-L275"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/seq.c",
      "lines": "251-275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/seq.c#L251-L275"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "VOLUME",
    "action": "Sets the overall output level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/main.c",
      "lines": "201-209",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L201-L209"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects one of eight tracks unless a free take is running.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1072-1073",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1072-L1073"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "TEMPO",
    "action": "Sets tempo by one BPM per detent while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1047-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1047-L1070"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "SOUND",
    "action": "Browses sounds on a synth track or kits on a drum track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1074-1092",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1074-L1092"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held, except parameter-lock editing with SEQ and step keys held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "steps_held",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LOCK VALUE",
    "action": "Creates or changes that parameter’s value on each held step, with pattern undo; a full lock pool refuses a new lock.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "208-233",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L208-L233"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "play",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "perform_black",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "texture_2",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "152-154",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L152-L154"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "SLOT",
    "action": "Chooses project slot 1 or 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1101-1103",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1101-L1103"
     }
    ]
   },
   {
    "mode": "settings",
    "gesture": "turn",
    "short_label": "SETTING",
    "action": "Chooses a settings row.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1101-1103",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1101-L1103"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "turn",
    "short_label": "STEP PAGE",
    "action": "Chooses the visible group of sixteen steps within the track length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1107-1109",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1107-L1109"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "MOVE STEP",
    "action": "Moves the cursor on a rest or moves a note and its ties, locks and timing past neighbouring notes or rests, with one undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1104-1106",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1104-L1106"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "474-553",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L474-L553"
     }
    ]
   },
   {
    "mode": "groove",
    "gesture": "turn",
    "short_label": "TEMPLATE",
    "action": "Chooses a groove template, adopts its suggested swing and raises a zero groove amount to full for a non-straight template.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1110-1115",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1110-L1115"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "turn",
    "short_label": "CLIP",
    "action": "Moves the clip cursor among six slots without launching it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1118-1120",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1118-L1120"
     }
    ]
   },
   {
    "mode": "sound",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "sound_env",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "sound_lfo",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "sound_sync",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "sound_fx",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "sound_insert",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "sound_filter",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses the synth engine, retaining the previous engine if all three heavy-engine spaces are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1116-1117",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1116-L1117"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/engines.c",
      "lines": "51-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/engines.c#L51-L69"
     }
    ]
   },
   {
    "mode": "drum_sound",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on a drum SOUND page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1120",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1120"
     }
    ]
   },
   {
    "mode": "drum_insert",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on a drum SOUND page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1120",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1120"
     }
    ]
   },
   {
    "mode": "drum_insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on a drum SOUND page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1120",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1120"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held, except parameter-lock editing with SEQ and step keys held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1066-1070",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1066-L1070"
     }
    ]
   },
   {
    "mode": "steps_held",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LOCK PARAM",
    "action": "Chooses the parameter to lock on the held steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "278-289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L278-L289"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM, with larger changes on fast turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1094-1100",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1094-L1100"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "drum_play",
    "gesture": "turn",
    "short_label": "KIT",
    "action": "Chooses the selected drum track’s kit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "146-156",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L146-L156"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_sound",
    "gesture": "turn",
    "short_label": "KIT",
    "action": "Chooses the selected drum track’s kit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-170",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L170"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "TRACK TYPE",
    "action": "Asks to switch the selected track between synth and drums; SEL confirms within four seconds and clears its pattern and clips without pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "127-128",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L127-L128"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1163-1173",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1163-L1173"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "409-424",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L409-L424"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "turn",
    "short_label": "DIVISION",
    "action": "Sets the selected track’s step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "123-124",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L123-L124"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step-entry cursor within the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "158-163",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L158-L163"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "568-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L568-L615"
     }
    ]
   },
   {
    "mode": "groove",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Sets the selected track’s swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "125-126",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L125-L126"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "LEVEL",
    "action": "Sets the selected track’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "121-122",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L121-L122"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_env",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Sets the synth envelope’s attack time, using beat values when envelope sync is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "129-130",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L129-L130"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_lfo",
    "gesture": "turn",
    "short_label": "LFO RATE",
    "action": "Sets the LFO’s free-running rate; beat sync takes precedence while enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "131-132",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L131-L132"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_sync",
    "gesture": "turn",
    "short_label": "LFO SYNC",
    "action": "Chooses free-running LFO timing or a beat division from four bars to a thirty-second note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "135-137",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_fx",
    "gesture": "turn",
    "short_label": "DRIVE",
    "action": "Sets the selected track’s drive amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "133-134",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L133-L134"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_insert",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Chooses OFF, SOFT, HARD, FOLD, FUZZ, CRUSH, PHASR, FLANG or CHOR; at most four tracks receive an insert.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-138",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "30-36",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L30-L36"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "931-934",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L931-L934"
     }
    ]
   },
   {
    "mode": "drum_insert",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Chooses OFF, SOFT, HARD, FOLD, FUZZ, CRUSH, PHASR, FLANG or CHOR; at most four tracks receive an insert.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-138",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "30-36",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L30-L36"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "931-934",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L931-L934"
     }
    ]
   },
   {
    "mode": "sound_filter",
    "gesture": "turn",
    "short_label": "INSERT MIX",
    "action": "Sets the selected track’s insert wet/dry mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "139-139",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L139"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_insert_2",
    "gesture": "turn",
    "short_label": "INSERT MIX",
    "action": "Sets the selected drum track’s insert wet/dry mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "167-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L167-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "short_label": "MIX FILTER",
    "action": "Sets the mix’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform_black",
    "gesture": "turn",
    "short_label": "MIX FILTER",
    "action": "Sets the mix’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "short_label": "TEXTURE",
    "action": "Selects a user sample, silence or a built-in texture named VINYL, TAPE, RAIN, WIND, RADIO or ROOM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-141",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L141"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture_2",
    "gesture": "turn",
    "short_label": "MOTION RATE",
    "action": "Sets the texture’s movement cycle from 1 to 16 bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "142-143",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L142-L143"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "turn",
    "short_label": "CLIP",
    "action": "Moves the clip cursor among six slots without launching it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1181-1183",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1181-L1183"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the PROJECT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "settings_metronome",
    "gesture": "turn",
    "short_label": "METRONOME",
    "action": "Chooses no metronome, clicks during recording or clicks throughout playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings_count_in",
    "gesture": "turn",
    "short_label": "COUNT IN",
    "action": "Switches the one-bar count-in before armed recording on or off; ordinary panel edits are not committed to settings in this build.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings_record_quant",
    "gesture": "turn",
    "short_label": "REC QUANT",
    "action": "Chooses immediate recording or a boundary from a sixteenth note through eight bars; ordinary panel edits are not committed to settings in this build.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings_clock",
    "gesture": "turn",
    "short_label": "CLOCK IN",
    "action": "Chooses internal, USB or TRS clock input.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings_midi_out",
    "gesture": "turn",
    "short_label": "MIDI OUT",
    "action": "Chooses key playing alone or sequencer playback as well for MIDI output.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings_midi_in",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "Chooses MIDI notes with clock or clock alone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings_lights",
    "gesture": "turn",
    "short_label": "LIGHTS",
    "action": "Changes LIGHTS between OFF, LOW, MID and HIGH, with no visible backlight change in this build.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "344-345",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L344-L345"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "395-396",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L395-L396"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1295-1300",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1295-L1300"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/hal/fm1_input.h",
      "lines": "290-291",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/hal/fm1_input.h#L290-L291"
     }
    ]
   },
   {
    "mode": "settings_key_lights",
    "gesture": "turn",
    "short_label": "KEY LIGHTS",
    "action": "Changes the displayed KEY LIGHTS choice between OFF, C KEYS, WHITE and ALL, with no effect on the key LEDs in this build.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "345",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L345"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "396",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L396"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1211-1300",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1211-L1300"
     }
    ]
   },
   {
    "mode": "settings_usb_audio",
    "gesture": "turn",
    "short_label": "USB AUDIO",
    "action": "Chooses MAIN or FULL USB audio routing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "settings",
    "gesture": "turn",
    "short_label": "VALUE",
    "action": "Changes the selected editable setting; BATTERY, AUDIO LOAD and VERSION are read-only.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "369-400",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
     }
    ]
   },
   {
    "mode": "macro_analog",
    "gesture": "turn",
    "short_label": "CUTOFF",
    "action": "Sets the ANALOG filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_analog.c",
      "lines": "161-175",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_analog.c#L161-L175"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_digital",
    "gesture": "turn",
    "short_label": "FM INDEX",
    "action": "Sets the DIGITAL modulation index.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_digital.c",
      "lines": "145-159",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_digital.c#L145-L159"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phase",
    "gesture": "turn",
    "short_label": "DISTORTION",
    "action": "Sets the PHASE wave distortion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phase.c",
      "lines": "185-199",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phase.c#L185-L199"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_sample",
    "gesture": "turn",
    "short_label": "SAMPLE SET",
    "action": "Sets the SAMPLE source set.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_sample.c",
      "lines": "204-218",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_sample.c#L204-L218"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_formant",
    "gesture": "turn",
    "short_label": "VOWEL",
    "action": "Sets the VOICE vowel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_trio",
    "gesture": "turn",
    "short_label": "CUTOFF",
    "action": "Sets the TRIO filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_trio.c",
      "lines": "380-394",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_trio.c#L380-L394"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_drawbar",
    "gesture": "turn",
    "short_label": "REGISTER",
    "action": "Sets the WHEEL registration.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283-297",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_drawbar.c#L283-L297"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_grain",
    "gesture": "turn",
    "short_label": "POSITION",
    "action": "Sets the GRAIN source position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_grain.c",
      "lines": "444-458",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_grain.c#L444-L458"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_fm6",
    "gesture": "turn",
    "short_label": "MOD LEVEL",
    "action": "Sets the FM6 modulator level offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_fm6.c",
      "lines": "372-387",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_fm6.c#L372-L387"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_noise",
    "gesture": "turn",
    "short_label": "NOISE FREQ",
    "action": "Sets the NOISE filter frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_noise.c",
      "lines": "259-280",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_noise.c#L259-L280"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "MIX FILTER",
    "action": "Sets the mix’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "566-575",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L566-L575"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "SHIFT",
    "action": "Moves the pattern’s note or drum-hit steps one position in the turn’s direction, keeping timing offsets, locks and fill conditions at their original positions, with pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "576-586",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L576-L586"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "REPEAT RATE",
    "action": "Chooses note-repeat rates from eighth notes to sixty-fourth notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "587-590",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L587-L590"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "CHORD",
    "action": "Chooses OFF, TRIAD, 7TH, 9TH, SUS4 or POWER chords for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "618-647",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L618-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "LEVEL",
    "action": "Sets the selected track’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "649-653",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L649-L653"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "660-662",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L660-L662"
     }
    ]
   },
   {
    "mode": "steps_held",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "NOTE OR LANE",
    "action": "Moves synth notes through the locked scale, or selects and auditions a drum lane without moving its hits; synth note edits and drum strength, ratchet and nudge edits have pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "208-276",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L208-L276"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "PEN NOTE",
    "action": "Chooses the note for new synth steps through the locked scale, or selects and auditions the drum lane.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "591-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L591-L615"
     }
    ]
   },
   {
    "mode": "macro_lofi_other",
    "gesture": "turn",
    "short_label": "WAVE",
    "action": "Chooses the LOFI waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_other_step",
    "gesture": "turn",
    "short_label": "WAVE",
    "action": "Chooses the LOFI waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram",
    "gesture": "turn",
    "short_label": "WAVE",
    "action": "Chooses the LOFI waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram_step",
    "gesture": "turn",
    "short_label": "WAVE",
    "action": "Chooses the LOFI waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_modal",
    "gesture": "turn",
    "short_label": "STRUCTURE",
    "action": "Sets the model’s structure.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_strng",
    "gesture": "turn",
    "short_label": "STRUCTURE",
    "action": "Sets the model’s structure.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_memb",
    "gesture": "turn",
    "short_label": "HARMONICITY",
    "action": "Sets the membrane’s harmonicity.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_symp",
    "gesture": "turn",
    "short_label": "SYMP CHORD",
    "action": "Chooses the sympathetic strings’ chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "drum_play",
    "gesture": "turn",
    "short_label": "LEVEL",
    "action": "Sets the selected track’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "146-156",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L146-L156"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_sound",
    "gesture": "turn",
    "short_label": "LEVEL",
    "action": "Sets the selected track’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-170",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L170"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "TRANSPOSE",
    "action": "Sets the selected track’s transposition from minus 24 to plus 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "127-128",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L127-L128"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Sets the selected track’s swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "123-124",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L123-L124"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "NOTE",
    "action": "Moves every note at the cursor through the locked scale, or puts the last note into an empty step, with pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "158-163",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L158-L163"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "568-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L568-L615"
     }
    ]
   },
   {
    "mode": "groove",
    "gesture": "turn",
    "short_label": "QUANTIZE",
    "action": "Sets how strongly the selected track’s timing follows the grid while preserving its recorded timing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "125-126",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L125-L126"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Sets the selected track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "121-122",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L121-L122"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_env",
    "gesture": "turn",
    "short_label": "DECAY",
    "action": "Sets the synth envelope’s decay time, using beat values when envelope sync is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "129-130",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L129-L130"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_lfo",
    "gesture": "turn",
    "short_label": "LFO WAVE",
    "action": "Chooses sine, triangle, saw, square or sample-and-hold modulation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "131-132",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L131-L132"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_sync",
    "gesture": "turn",
    "short_label": "LFO TRIGGER",
    "action": "Chooses whether a new phrase restarts the LFO or lets it run freely.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "135-137",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_fx",
    "gesture": "turn",
    "short_label": "CHORUS",
    "action": "Sets the selected track’s chorus amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "133-134",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L133-L134"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "insert_drive",
    "gesture": "turn",
    "short_label": "DRIVE",
    "action": "Sets the insert’s distortion strength.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "insert_crush",
    "gesture": "turn",
    "short_label": "BITS",
    "action": "Sets the insert’s bit depth from 1 to 16 bits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "insert_sweep",
    "gesture": "turn",
    "short_label": "FX RATE",
    "action": "Sets the insert’s modulation rate.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "sound_filter",
    "gesture": "turn",
    "short_label": "FILTER TYPE",
    "action": "Chooses low-pass, band-pass or high-pass for ANALOG; other engines have no action here.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "139-139",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L139"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "167-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L167-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Sets the mix’s dust amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform_black",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Sets the mix’s dust amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "short_label": "TEXTURE LVL",
    "action": "Sets the background texture’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-141",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L141"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture_2",
    "gesture": "turn",
    "short_label": "WHEN",
    "action": "Chooses texture only during playback or continuously.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "142-143",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L142-L143"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the CLIPS page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "182-184",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L182-L184"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the PROJECT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "settings",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the SETTINGS page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "macro_analog",
    "gesture": "turn",
    "short_label": "RESONANCE",
    "action": "Sets the ANALOG filter resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_analog.c",
      "lines": "161-175",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_analog.c#L161-L175"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_digital",
    "gesture": "turn",
    "short_label": "MOD DECAY",
    "action": "Sets the DIGITAL modulation decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_digital.c",
      "lines": "145-159",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_digital.c#L145-L159"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phase",
    "gesture": "turn",
    "short_label": "PHASE ENV",
    "action": "Sets the PHASE envelope amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phase.c",
      "lines": "185-199",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phase.c#L185-L199"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_sample",
    "gesture": "turn",
    "short_label": "CUTOFF",
    "action": "Sets the SAMPLE cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_sample.c",
      "lines": "204-218",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_sample.c#L204-L218"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_formant",
    "gesture": "turn",
    "short_label": "BUZZ",
    "action": "Sets the VOICE buzz level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_trio",
    "gesture": "turn",
    "short_label": "RESONANCE",
    "action": "Sets the TRIO resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_trio.c",
      "lines": "380-394",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_trio.c#L380-L394"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_drawbar",
    "gesture": "turn",
    "short_label": "PERCUSSION",
    "action": "Sets the WHEEL percussion setting.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283-297",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_drawbar.c#L283-L297"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_grain",
    "gesture": "turn",
    "short_label": "GRAIN SIZE",
    "action": "Sets the GRAIN size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_grain.c",
      "lines": "444-458",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_grain.c#L444-L458"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_fm6",
    "gesture": "turn",
    "short_label": "MOD RATIO",
    "action": "Sets the FM6 modulator ratio offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_fm6.c",
      "lines": "372-387",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_fm6.c#L372-L387"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_noise",
    "gesture": "turn",
    "short_label": "RESONANCE",
    "action": "Sets the NOISE resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_noise.c",
      "lines": "259-280",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_noise.c#L259-L280"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "DUST",
    "action": "Sets the mix’s dust amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "566-575",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L566-L575"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "DOUBLE HALF",
    "action": "Repeats the note or drum-hit steps to double the length, or halves the length, without copying timing offsets, locks or fill conditions, with pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "576-586",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L576-L586"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "98-116",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L98-L116"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "587-590",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L587-L590"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "SCALE",
    "action": "Chooses the scale for every synth track, using the selected synth or first synth as the starting value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "618-647",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L618-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "PAN",
    "action": "Sets the selected track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "649-653",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L649-L653"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "660-662",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L660-L662"
     }
    ]
   },
   {
    "mode": "steps_held",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "VELOCITY",
    "action": "Sets held synth steps’ velocity from 1 to 127 and clears their accent, or changes the selected drum lane’s four-level hit strength; synth note edits and drum strength, ratchet and nudge edits have pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "208-276",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L208-L276"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "DIVISION",
    "action": "Sets the selected track’s step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "591-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L591-L615"
     }
    ]
   },
   {
    "mode": "macro_lofi_other",
    "gesture": "turn",
    "short_label": "DUTY",
    "action": "Sets the LOFI pulse duty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_other_step",
    "gesture": "turn",
    "short_label": "DUTY",
    "action": "Sets the LOFI pulse duty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram",
    "gesture": "turn",
    "short_label": "WAVETABLE",
    "action": "Chooses the WRAM wavetable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram_step",
    "gesture": "turn",
    "short_label": "WAVETABLE",
    "action": "Chooses the WRAM wavetable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_modal",
    "gesture": "turn",
    "short_label": "BRIGHTNESS",
    "action": "Sets the model’s brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_strng",
    "gesture": "turn",
    "short_label": "BRIGHTNESS",
    "action": "Sets the model’s brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_memb",
    "gesture": "turn",
    "short_label": "BRIGHTNESS",
    "action": "Sets the model’s brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_symp",
    "gesture": "turn",
    "short_label": "BRIGHTNESS",
    "action": "Sets the model’s brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "insert_off",
    "gesture": "turn",
    "short_label": "INSERT A",
    "action": "Changes stored insert value A while the insert is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "210-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L210-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "drum_play",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Sets the selected track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "146-156",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L146-L156"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_sound",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Sets the selected track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-170",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L170"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Sets the selected track’s pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "127-128",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L127-L128"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Sets the selected track’s pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "123-124",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L123-L124"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "NOTE TIME",
    "action": "Changes a note’s length in steps up to the next note or pattern end, or changes an empty step between note, tie and rest, with pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "158-163",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L158-L163"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "568-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L568-L615"
     }
    ]
   },
   {
    "mode": "groove",
    "gesture": "turn",
    "short_label": "GROOVE",
    "action": "Sets the selected track’s timing and velocity groove amounts together, taking its starting groove from the song on the first edit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "125-126",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L125-L126"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "REVERB",
    "action": "Sets the selected track’s reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "121-122",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L121-L122"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_env",
    "gesture": "turn",
    "short_label": "SUSTAIN",
    "action": "Sets the synth envelope’s sustain level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "129-130",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L129-L130"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_lfo",
    "gesture": "turn",
    "short_label": "LFO PITCH",
    "action": "Sets the LFO’s pitch depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "131-132",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L131-L132"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_sync",
    "gesture": "turn",
    "short_label": "LFO POLARITY",
    "action": "Chooses bipolar or unipolar LFO modulation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "135-137",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_fx",
    "gesture": "turn",
    "short_label": "DELAY",
    "action": "Sets the selected track’s delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "133-134",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L133-L134"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "insert_drive",
    "gesture": "turn",
    "short_label": "TONE",
    "action": "Sets the insert’s tone filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "insert_crush",
    "gesture": "turn",
    "short_label": "SAMPLE RATE",
    "action": "Sets the insert’s sample rate from about 689 Hz to 44 kHz.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "insert_sweep",
    "gesture": "turn",
    "short_label": "FX DEPTH",
    "action": "Sets the insert’s modulation depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "sound_filter",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "139-139",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L139"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "167-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L167-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "short_label": "DUCK",
    "action": "Sets how strongly the kick ducks the mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform_black",
    "gesture": "turn",
    "short_label": "DUCK",
    "action": "Sets how strongly the kick ducks the mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "short_label": "TEXTURE TONE",
    "action": "Sets the background texture’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-141",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L141"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture_2",
    "gesture": "turn",
    "short_label": "TEXTURE DUCK",
    "action": "Switches kick-driven ducking of the texture on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "142-143",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L142-L143"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the CLIPS page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "182-184",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L182-L184"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the PROJECT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "settings",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the SETTINGS page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "macro_analog",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Sets the envelope attack time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_analog.c",
      "lines": "161-175",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_analog.c#L161-L175"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_digital",
    "gesture": "turn",
    "short_label": "FM FEEDBACK",
    "action": "Sets the DIGITAL feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_digital.c",
      "lines": "145-159",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_digital.c#L145-L159"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phase",
    "gesture": "turn",
    "short_label": "DETUNE",
    "action": "Sets the PHASE detuning.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phase.c",
      "lines": "185-199",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phase.c#L185-L199"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_sample",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Sets the envelope attack time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_sample.c",
      "lines": "204-218",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_sample.c#L204-L218"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_formant",
    "gesture": "turn",
    "short_label": "BREATH",
    "action": "Sets the VOICE breath level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_trio",
    "gesture": "turn",
    "short_label": "PULSE WIDTH",
    "action": "Sets the TRIO pulse width.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_trio.c",
      "lines": "380-394",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_trio.c#L380-L394"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_drawbar",
    "gesture": "turn",
    "short_label": "ORGAN DRIVE",
    "action": "Sets the WHEEL overdrive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283-297",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_drawbar.c#L283-L297"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_grain",
    "gesture": "turn",
    "short_label": "DENSITY",
    "action": "Sets the GRAIN density.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_grain.c",
      "lines": "444-458",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_grain.c#L444-L458"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_fm6",
    "gesture": "turn",
    "short_label": "MOD ENVELOPE",
    "action": "Sets the FM6 modulator envelope offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_fm6.c",
      "lines": "372-387",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_fm6.c#L372-L387"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_noise",
    "gesture": "turn",
    "short_label": "COLOUR",
    "action": "Sets the NOISE colour.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_noise.c",
      "lines": "259-280",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_noise.c#L259-L280"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "DUCK",
    "action": "Sets kick-driven ducking of the mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "566-575",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L566-L575"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "NOTE SHIFT",
    "action": "Transposes every synth note by a semitone per direction of turn, with pattern undo; drum tracks are unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "576-586",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L576-L586"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "587-590",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L587-L590"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "SCALE LOCK",
    "action": "Chooses OFF, LOCK or WHITE for every synth track while a synth track is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "618-647",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L618-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "REVERB",
    "action": "Sets the selected track’s reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "649-653",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L649-L653"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "660-662",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L660-L662"
     }
    ]
   },
   {
    "mode": "steps_held",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "RATCHET",
    "action": "Sets held notes’ or selected drum hits’ ratchets from one to four repeats; synth note edits and drum strength, ratchet and nudge edits have pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "208-276",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L208-L276"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "SWING",
    "action": "Sets the selected track’s swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "591-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L591-L615"
     }
    ]
   },
   {
    "mode": "macro_lofi_other",
    "gesture": "turn",
    "short_label": "CRUSH",
    "action": "Sets LOFI crushing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_other_step",
    "gesture": "turn",
    "short_label": "CHIP DECAY",
    "action": "Sets the STEP chip’s decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram",
    "gesture": "turn",
    "short_label": "CRUSH",
    "action": "Sets LOFI crushing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram_step",
    "gesture": "turn",
    "short_label": "CHIP DECAY",
    "action": "Sets the STEP chip’s decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_modal",
    "gesture": "turn",
    "short_label": "DAMPING",
    "action": "Sets the model’s damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_strng",
    "gesture": "turn",
    "short_label": "DAMPING",
    "action": "Sets the model’s damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_memb",
    "gesture": "turn",
    "short_label": "DAMPING",
    "action": "Sets the model’s damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_symp",
    "gesture": "turn",
    "short_label": "DAMPING",
    "action": "Sets the model’s damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "insert_off",
    "gesture": "turn",
    "short_label": "INSERT B",
    "action": "Changes stored insert value B while the insert is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "210-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L210-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "drum_play",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Sets the selected track’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "146-156",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L146-L156"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_sound",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Sets the selected track’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "166-170",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L166-L170"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "DIVISION",
    "action": "Sets the selected track’s step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "127-128",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L127-L128"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "turn",
    "short_label": "SHIFT",
    "action": "Moves the pattern’s note or drum-hit steps one position in the turn’s direction, keeping timing offsets, locks and fill conditions at their original positions, with pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "123-124",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L123-L124"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "FLAGS",
    "action": "Chooses ordinary, accent, slide or accent with slide for the cursor’s step, with pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "158-163",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L158-L163"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "568-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L568-L615"
     }
    ]
   },
   {
    "mode": "groove",
    "gesture": "turn",
    "short_label": "HUMANIZE",
    "action": "Sets the selected track’s timing and velocity humanize amounts together.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "125-126",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L125-L126"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "DELAY",
    "action": "Sets the selected track’s delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "121-122",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L121-L122"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_env",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the synth envelope’s release time, using beat values when envelope sync is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "129-130",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L129-L130"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_lfo",
    "gesture": "turn",
    "short_label": "LFO FILTER",
    "action": "Sets the LFO’s filter depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "131-132",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L131-L132"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_sync",
    "gesture": "turn",
    "short_label": "ENV SYNC",
    "action": "Switches envelope attack, decay and release between time and beat values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "135-137",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "sound_fx",
    "gesture": "turn",
    "short_label": "REVERB",
    "action": "Sets the selected track’s reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "133-134",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L133-L134"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "insert_drive",
    "gesture": "turn",
    "short_label": "OUTPUT LEVEL",
    "action": "Sets the insert’s output level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "insert_crush",
    "gesture": "turn",
    "short_label": "LOW PASS",
    "action": "Sets the insert’s low-pass cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "insert_sweep",
    "gesture": "turn",
    "short_label": "FEEDBACK",
    "action": "Sets the insert’s feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "201-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L201-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   },
   {
    "mode": "sound_filter",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "139-139",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L139"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "drum_insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "167-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L167-L169"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Sets the selected track’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "perform_black",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Sets the selected track’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "144-145",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L144-L145"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "short_label": "MOVEMENT",
    "action": "Sets how deeply the background texture’s level and tone move.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "140-141",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L140-L141"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "texture_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "142-143",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L142-L143"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1122-1186",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1122-L1186"
     }
    ]
   },
   {
    "mode": "clips",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the CLIPS page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "182-184",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L182-L184"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the PROJECT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "settings",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned action on the SETTINGS page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "150-151",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L150-L151"
     }
    ]
   },
   {
    "mode": "macro_analog",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_analog.c",
      "lines": "161-175",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_analog.c#L161-L175"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_digital",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_digital.c",
      "lines": "145-159",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_digital.c#L145-L159"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phase",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phase.c",
      "lines": "185-199",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phase.c#L185-L199"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_sample",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_sample.c",
      "lines": "204-218",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_sample.c#L204-L218"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_formant",
    "gesture": "turn",
    "short_label": "TALK TIME",
    "action": "Sets the VOICE vowel transition time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_trio",
    "gesture": "turn",
    "short_label": "OSC INTERVAL",
    "action": "Sets the TRIO second oscillator interval.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_trio.c",
      "lines": "380-394",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_trio.c#L380-L394"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_drawbar",
    "gesture": "turn",
    "short_label": "ROTOR",
    "action": "Sets the WHEEL rotor setting.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283-297",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_drawbar.c#L283-L297"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_grain",
    "gesture": "turn",
    "short_label": "SPREAD",
    "action": "Sets the GRAIN spread.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_grain.c",
      "lines": "444-458",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_grain.c#L444-L458"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_fm6",
    "gesture": "turn",
    "short_label": "FM6 PATCH",
    "action": "Sets the FM6 patch slot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_fm6.c",
      "lines": "372-387",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_fm6.c#L372-L387"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_noise",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_noise.c",
      "lines": "259-280",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_noise.c#L259-L280"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "153-178",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L153-L178"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "TRACK FILTER",
    "action": "Sets the selected track’s low-pass or high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "566-575",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L566-L575"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "576-586",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L576-L586"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "587-590",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L587-L590"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "TRANSPOSE",
    "action": "Sets the selected synth track’s transposition from minus 24 to plus 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "618-647",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L618-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "DELAY",
    "action": "Sets the selected track’s delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "649-653",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L649-L653"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Has no assigned action while this function button is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "660-662",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L660-L662"
     }
    ]
   },
   {
    "mode": "steps_held",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "NUDGE",
    "action": "Moves held steps early or late in sixty-fourths of a step; synth note edits and drum strength, ratchet and nudge edits have pattern undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "208-276",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L208-L276"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LENGTH",
    "action": "Sets the selected track’s length from 1 to 64 steps and brings an out-of-range step page back into view.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_layers.c",
      "lines": "591-615",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_layers.c#L591-L615"
     }
    ]
   },
   {
    "mode": "macro_lofi_other",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_other_step",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_lofi_wram_step",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the envelope release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L47-L56"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_modal",
    "gesture": "turn",
    "short_label": "POSITION",
    "action": "Sets the strike or pluck position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_strng",
    "gesture": "turn",
    "short_label": "POSITION",
    "action": "Sets the strike or pluck position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_memb",
    "gesture": "turn",
    "short_label": "POSITION",
    "action": "Sets the strike or pluck position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "macro_phys_symp",
    "gesture": "turn",
    "short_label": "SYMPATHY",
    "action": "Sets coupling into the sympathetic strings.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/eng_phys.c",
      "lines": "265-287",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/eng_phys.c#L265-L287"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "187-205",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L187-L205"
     }
    ]
   },
   {
    "mode": "insert_off",
    "gesture": "turn",
    "short_label": "INSERT C",
    "action": "Changes stored insert value C while the insert is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/params.c",
      "lines": "210-214",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/params.c#L210-L214"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "138-169",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L138-L169"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for PERFORM when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "PERFORM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for TRACKS when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for SOUND when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for MIXER when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights on PLAY, PROJECT or SETTINGS when no function layer is held.",
    "short_label": "PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for CLIPS when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "CLIPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for GROOVE when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "GROOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights for SEQUENCER when no function layer is active, or for this button’s active layer, with another active layer taking the light instead.",
    "short_label": "SEQUENCER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     },
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark because SOUND pages use the EDIT light.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Stays dark because SOUND pages use the EDIT light.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1209-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1209-L1223"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Lights during the first quarter of each beat while playback runs and stays dark when stopped.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1220-1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1220-L1223"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights during recording or a free take when no record boundary change is pending.",
    "short_label": "RECORDING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1223"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Alternates every 125 ms while armed or waiting for a recording boundary change.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1223",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1223"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the synth keyboard is below its centre octave.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1230-1233",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1230-L1233"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lights while the ghost drum-hit button is held.",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1227-1229",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1227-L1229"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "lit",
    "action": "Lights while the reverb throw is held.",
    "short_label": "REV THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1224-1226",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1224-L1226"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the synth keyboard is above its centre octave.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1230-1233",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1230-L1233"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lights while the hard drum-hit button is held.",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1227-1229",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1227-L1229"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "lit",
    "action": "Lights while the echo throw is held.",
    "short_label": "ECHO THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1224-1226",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1224-L1226"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "steps",
    "gesture": "lit",
    "action": "Shows occupied white-key steps except the running playhead, which reverses their brightness.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1234-1244",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1234-L1244"
     }
    ]
   },
   {
    "mode": "steps",
    "gesture": "dim",
    "action": "Shows empty steps within the current pattern page, with the playhead reversing occupied and empty brightness.",
    "short_label": "EMPTY STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1234-1244",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1234-L1244"
     }
    ]
   },
   {
    "mode": "key",
    "gesture": "lit",
    "action": "Lights the white key for the selected track among keys 1–8.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1245-1251",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1245-L1251"
     }
    ]
   },
   {
    "mode": "key",
    "gesture": "dim",
    "action": "Dims the other seven track-select white keys.",
    "short_label": "OTHER TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1245-1251",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1245-L1251"
     }
    ]
   },
   {
    "mode": "clips_hold",
    "gesture": "lit",
    "action": "White keys 1–6 show the selected track’s playing clip and keys 9–14 light when every track is on that scene.",
    "short_label": "PLAYING CLIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1252-1268",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1252-L1268"
     }
    ]
   },
   {
    "mode": "clips_hold",
    "gesture": "blinking",
    "action": "The queued track clip among white keys 1–6 alternates every 125 ms before its bar starts.",
    "short_label": "QUEUED CLIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1252-1268",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1252-L1268"
     }
    ]
   },
   {
    "mode": "clips_hold",
    "gesture": "dim",
    "action": "Shows stored track clips among white keys 1–6 and scenes with any stored track clip among keys 9–14.",
    "short_label": "STORED CLIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1252-1268",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1252-L1268"
     }
    ]
   },
   {
    "mode": "mix_hold",
    "gesture": "lit",
    "action": "White keys 1–8 light for tracks whose mute is off and keys 9–16 light for enabled solo bits.",
    "short_label": "MUTE / SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1269-1275",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1269-L1275"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "With no function layer held and scale lock on, lights scale roots and keys physically held.",
    "short_label": "SCALE ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1276-1289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1276-L1289"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With no function layer held and scale lock on, dims other scale keys, using white keys and C roots for WHITE or chord mode.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1276-1289",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1276-L1289"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "Outside the held step, key, clip and mix layers, key lights stay dark unless scale lock is on.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "nicodesy06/fm1-move",
      "ref": "0.3.1",
      "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
      "path": "firmware/src/ui_move_ctl.c",
      "lines": "1234-1298",
      "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1234-L1298"
     }
    ]
   }
  ]
 },
 "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": "The unit keeps two saved projects and a separate working autosave, with eight tracks and six clips per track, their sounds, notes, timing, locks and groove. It also has 32 user sounds, three writable sample slots, 27 stored FM6 patches, four SYN kits and settings. Projects refer to samples, SYN kits and bank patches; those contents are backed up separately. A panel SAVE that exceeds project capacity reports PROJECT TOO DENSE and changes no flash; an oversized autosave silently writes nothing, so dense work can remain only in memory without a warning. When clip memory fills, the playing pattern still goes into the project, while its stored clip keeps the older version. Stop, close PROJECT or SETTINGS and leave it quiet: autosave needs 2.5 seconds without input and at least 20 seconds since startup or its previous attempt. It does not save at power-off or flush new work before an update. Ordinary SETTINGS edits are not written to settings in this build; calibration or a settings, MIDI or SYN-kit send can write that record. Count-in and REC cycle are part of the settings record when a calibration or editor send commits it; ordinary page changes still do not trigger that write. A track’s own edited FM6 patch is not included in project or working-project backups: store it in the FM6 bank or export it separately. New MIDI LEARN mappings also vanish at power-off unless a calibration or explicit settings, SYN-kit or MIDI send writes them; the device page rejects a full backup containing those mappings. At startup, if no readable Move autosave exists, Move tries to import SLOOP’s working project into tracks 1–4; it does not import SLOOP’s saved slots, and the imported work can reach Move’s autosave later under the usual idle conditions. From the flash atlas: install with packaged Felucca-family loader: Loader compares/programs only app sectors in this range. Incoming program overlaps Open USER projects/preferences and the first part of its sample audio region. Flash head is preserved by this loader; unrelated previous updater may have its own writes before loader entry. Replacing Open’s sample header leaves its whole sample bank unreadable. The same program writes can also leave PIGEON’s whole sample bank unreadable (successful recognized loader install; differing program sectors only). loader finishes or refuses unknown flash chip: update-record scan: Conditional update-record cleanup only; no projects, sounds or samples are at risk from this cleanup. It is detail-only (After an install, erase only a 4 KiB sector whose last 256 bytes hold a valid update record (marker 0x5441 at +6 and a matching nonzero CRC16 over bytes 2..79): in practice the family's staging-record sector 0xE4000 and, on a first install from stock, stock's record sector 0xE8000. Saved music does not hold that record. This loader does not skip 0x97000-0xDFFFF). app startup cleanup: Erases all five sectors if either sentinel has any non-erased byte; no magic check and no question. This can damage stock settings/possible patterns, Baud Girl presets/patterns or Open sample audio there (first 4 bytes E0000 or first 8 bytes E4F00 contain any non-FF). What FM1 Move writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over FM1 Move's is in when_you_leave.",
  "lost": "See the switching advice in this section. Back up using the firmware that made the work before installing Move, starting it for the first time or switching away; another firmware can overwrite Move work during its own installation, startup or ordinary use.\n\nOn startup, Move erases the update area without a question if either of its checked marker locations contains data. See the switching advice in this section for the affected saved work. Writes to shared storage can also remove other firmwares’ unfinished restores and pending updates; keep the original files. Occupied update markers can still trigger the erase.\n\nWith no readable Move autosave, the first successful idle autosave of a small default or imported project can happen about twenty seconds after startup with no edit or question. See the switching advice in this section for the affected saved work. The first copy is used when there is no matching Move record; the next successful write uses the other copy.\n\nEvery later autosave, and a larger first autosave, can also overwrite other firmwares’ saved work, depending on which copy and project chunks are written. See the switching advice in this section for the affected saved work. SLOOP’s USR4 marker blocks ordinary autosave. Oversized autosaves silently write nothing.\n\nRestoring the working project from a file writes the autosave area. See the switching advice in this section for the affected saved work. Direct file restores bypass SLOOP’s USR4-marker protection, so that sample is at risk here even when ordinary autosave would refuse.\n\nSaving, deleting or restoring either saved project writes the selected slot and chunks. See the switching advice in this section for the affected saved work. Ordinary SAVE refuses while SLOOP’s USR4 marker is present, but direct file restores bypass that check. Foreign slots that look empty receive no overwrite question; an occupied Move slot asks before panel replacement, and deletion has no undo.\n\nA settings, SYN-kit or MIDI send can write without a device question; calibration can do so after completion or timeout when settings differ or no settings record was accepted. See the switching advice in this section for the affected saved work.\n\nSending, renaming, erasing or restoring user sounds rewrites the whole sixteen-sound bank. See the switching advice in this section for the affected saved work. A newer shared-bank record can be selected on return before its sound format is rejected; an older copy may not be retried, so some sounds can become unreadable. These writes can also replace ChoralRoot’s legacy sounds, kept for returning to ChoralRoot 0.21 or older.\n\nWriting or restoring the FM6 bank writes its saved bank. See the switching advice in this section for the affected saved work. A remaining older copy is not a guaranteed recovery path: if the original firmware selects a newer Move record and rejects its contents, its earlier working session or bank can appear absent. These writes can also remove other firmwares’ temporary bank transfers; keep the original files.\n\nSending, erasing or restoring samples writes the target slot and sectors reached. See the switching advice in this section for the affected saved work. These firmware sample commands have no stopped-transport guard, and the header is erased before a complete upload is validated; an interrupted send can already have lost the old sample, with no undo. These writes can also replace ChoralRoot’s legacy CZ patches 17–32 and FM TONE patches, kept for returning to ChoralRoot 0.21 or older.\n\nSending another firmware update from Move erases its update area, including after staging failure, without a separate device question about the previous contents. See the switching advice in this section for the affected saved work. Work newer than the last successful project save or autosave is not flushed before entering the updater. These writes can also remove other firmwares’ unfinished restores and pending updates; keep the original files.\n\nInstalling Move rewrites differing program sectors. See the switching advice in this section for the affected saved work. Its loader also removes only sectors containing a valid update record, which saved music does not hold. Back up Open’s projects and audio in Open before installing Move.\n\nThe author’s page asks before its normal destructive sends and whole-file restore, but the device protocol has no equivalent per-object question; omitted restore objects stay unchanged. Stock locations are reported, Baud Girl locations are inferred, and all overlap consequences here are inferred from source layouts rather than tested on a unit. From the flash atlas: Other firmwares reading FM1 Move's data: Felucca lists FM1 Move's user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); Rainbow Mode lists FM1 Move's user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); Felucca [Salt] lists FM1 Move's user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3, but plays them differently (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt; Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); WaveLoop FM-1 lists FM1 Move's user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); WaveLoop FM-1 reads and uses FM1 Move's sample slot USR1; sample slot USR2 (Saved samples may have no slice positions set by you); SLOOP lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP reads and uses FM1 Move's FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it); sloopDX lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them); SLOOP DX7 Banks lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses FM1 Move's FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP Floyd FM lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound); SLOOP Floyd FM reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); FM1 Quest lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses FM1 Move's sample slot USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); JIANT takes over FM1 Move's user sounds U01–U16; user sounds U17–U32, converting them (JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept); ChoralRoot lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from); GHOULBOX lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently; fm1-chord takes over FM1 Move's user sounds U01–U16; user sounds U17–U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); MAKU reads and uses FM1 Move's user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3 (MAKU leaves these sample bytes in place, but its controls use built-in material; these uploaded samples are not available to play here); Jangada reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3; Skiff lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (The same saved sound format does not guarantee the same sound or pattern playback); Skiff reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3 (Skiff uses its own sound engines, so saved loops or slices can play differently); Hortator lists FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3, but plays them differently (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); ORBIT takes over FM1 Move's user sounds U01–U16; user sounds U17–U32, converting them (Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play); ORBIT reads and uses FM1 Move's FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); PIGEON reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3 (Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same); winampFM Synth lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses FM1 Move's FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); X0X lists FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3, but plays them differently (Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used); Jangada imports only some FM1 Move preferences, and interprets some saved choices differently. Its next preference save removes FM1 Move’s synth kits and MIDI settings.; Jangada converts only older version 1 sounds in this group. Newer sound versions look empty, and saving anywhere in the group drops them from the rewritten group.. What FM1 Move reads of other firmwares' data: FM1 Move reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists SLOOP's user sounds U01-U16; user sounds U17-U32; music in progress (autosave), but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses SLOOP's FM6 patch bank B1-B27; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sample slot USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move takes over Hortator's settings and panel calibration, converting them (Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings); FM1 Move reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses Rainbow Mode's User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses MAKU's inherited user sample 1; inherited user sample 2; inherited user sample 3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; working loop, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses SLOOP DX7 Banks's FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move takes over Jangada's preferences, calibration and MIDI LEARN map, converting them (Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings); FM1 Move reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses WaveLoop FM-1's user sample USR1; user sample USR2 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses ORBIT's FM6 bank B1-B27; sample slot USR1; sample slot USR2; sample slot USR3; sample slot USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists SLOOP Floyd FM's user sounds U01–U16; user sounds U17–U32; working loop kept by autosave, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses SLOOP Floyd FM's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists winampFM Synth's user sounds 1-16; user sounds 17-32; working music kept by autosave, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses winampFM Synth's FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists Felucca [Salt]'s user sounds U01-U16; user sounds U17-U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); FM1 Move reads and uses Felucca [Salt]'s user sample USR1; user sample USR2; user sample USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses PIGEON's user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists FM1 Quest's user sounds U01–U16; user sounds U17–U32; working music (autosave), but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses FM1 Quest's sample USR1 (Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "On the author’s device page, connect the FM-1 and choose Backup, then Save a backup. This reads the unit and downloads one file: the live working project, two saved projects, settings, user sounds, FM6 bank, four SYN kits and samples USR1–USR3. It leaves out SLOOP’s saved sections and old autosave, USR4, undo, octave and live track-own FM6 patch bytes. Restoring asks once in the browser and writes the included objects separately; represented empty slots and banks are cleared, omitted objects stay as they were. An interrupted sample restore loses the old sample as soon as its header is erased. There is a restore fault: when the unit includes learned CCs or non-default stored MIDI channels in a full backup, the device page rejects that file. Its restore list does not accept the MIDI part. Do not rely on that file as a tested recovery path; retain the original firmware’s backups and export projects separately. Project exports contain a project and clips, with references to separately stored sounds or samples. Before going back a version, keep exports from that version too. Early builds with four slots need their projects 2–4 exported before upgrading; only their project 1 and autosave retain their positions. Reading old projects in 0.3.1 does not prove an older build can read new saves. The count-in and REC cycle choices are captured in the settings part of a backup even when an ordinary page edit has not reached flash. A live FM6 patch sent to a track must be stored in the FM6 bank or exported separately.",
  "source": [
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/felucca.c",
    "lines": "51-75",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L75"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "650-762",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L650-L762"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "810-917",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L810-L917"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "981-1104",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L981-L1104"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/projfmt.c",
    "lines": "179-190",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/projfmt.c#L179-L190"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/projfmt.c",
    "lines": "604-635",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/projfmt.c#L604-L635"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/clip.c",
    "lines": "90-115",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L90-L115"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/storage.c",
    "lines": "26-43",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/storage.c#L26-L43"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ota.c",
    "lines": "342-408",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ota.c#L342-L408"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/main.c",
    "lines": "141-146",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L141-L146"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/main.c",
    "lines": "182-185",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L182-L185"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "365-400",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L365-L400"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/editor.c",
    "lines": "431-559",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor.c#L431-L559"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/editor.c",
    "lines": "718-765",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor.c#L718-L765"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/device/index.html",
    "lines": "3170-3182",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/device/index.html#L3170-L3182"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/device/index.html",
    "lines": "3204-3217",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/device/index.html#L3204-L3217"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/device/index.html",
    "lines": "3262-3279",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/device/index.html#L3262-L3279"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/device/index.html",
    "lines": "4260-4279",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/device/index.html#L4260-L4279"
   },
   {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/PROJECT_FORMAT.md",
    "lines": "81-94",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/PROJECT_FORMAT.md#L81-L94"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/loader/ldr_core.c",
    "lines": "91-103",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/loader/ldr_core.c#L91-L103"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/loader/ldr_core.c",
    "lines": "132-156",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/loader/ldr_core.c#L132-L156"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/panel.c",
    "lines": "94-154",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/panel.c#L94-L154"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/upreset.c",
    "lines": "173-194",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/upreset.c#L173-L194"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/fm6_bank.c",
    "lines": "81-112",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/fm6_bank.c#L81-L112"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/editor.c",
    "lines": "118-155",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor.c#L118-L155"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/editor.c",
    "lines": "947-1006",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor.c#L947-L1006"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/editor_fm6.c",
    "lines": "61-74",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor_fm6.c#L61-L74"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/projfmt.c",
    "lines": "160-173",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/projfmt.c#L160-L173"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui.c",
    "lines": "720-783",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui.c#L720-L783"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/felucca.c",
    "lines": "51-52",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L52"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "723-764",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L723-L764"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/editor.c",
    "lines": "491-509",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor.c#L491-L509"
   }
  ],
  "overwrites_by_trigger": [
   {
    "trigger": "first_start",
    "owner_text": "On startup, Move erases the update area without a question if either of its checked marker locations contains data. See the switching advice in this section for the affected saved work. Writes to shared storage can also remove other firmwares’ unfinished restores and pending updates; keep the original files. Occupied update markers can still trigger the erase."
   },
   {
    "trigger": "first_autosave",
    "owner_text": "With no readable Move autosave, the first successful idle autosave of a small default or imported project can happen about twenty seconds after startup with no edit or question. See the switching advice in this section for the affected saved work. The first copy is used when there is no matching Move record; the next successful write uses the other copy."
   },
   {
    "trigger": "autosave",
    "owner_text": "Every later autosave, and a larger first autosave, can also overwrite other firmwares’ saved work, depending on which copy and project chunks are written. See the switching advice in this section for the affected saved work. SLOOP’s USR4 marker blocks ordinary autosave. Oversized autosaves silently write nothing."
   },
   {
    "trigger": "working_restore",
    "owner_text": "Restoring the working project from a file writes the autosave area. See the switching advice in this section for the affected saved work. Direct file restores bypass SLOOP’s USR4-marker protection, so that sample is at risk here even when ordinary autosave would refuse."
   },
   {
    "trigger": "project_write",
    "owner_text": "Saving, deleting or restoring either saved project writes the selected slot and chunks. See the switching advice in this section for the affected saved work. Ordinary SAVE refuses while SLOOP’s USR4 marker is present, but direct file restores bypass that check. Foreign slots that look empty receive no overwrite question; an occupied Move slot asks before panel replacement, and deletion has no undo."
   },
   {
    "trigger": "settings_write",
    "owner_text": "A settings, SYN-kit or MIDI send can write without a device question; calibration can do so after completion or timeout when settings differ or no settings record was accepted. See the switching advice in this section for the affected saved work."
   },
   {
    "trigger": "user_bank",
    "owner_text": "Sending, renaming, erasing or restoring user sounds rewrites the whole sixteen-sound bank. See the switching advice in this section for the affected saved work. A newer shared-bank record can be selected on return before its sound format is rejected; an older copy may not be retried, so some sounds can become unreadable. These writes can also replace ChoralRoot’s legacy sounds, kept for returning to ChoralRoot 0.21 or older."
   },
   {
    "trigger": "fm6_bank",
    "owner_text": "Writing or restoring the FM6 bank writes its saved bank. See the switching advice in this section for the affected saved work. A remaining older copy is not a guaranteed recovery path: if the original firmware selects a newer Move record and rejects its contents, its earlier working session or bank can appear absent. These writes can also remove other firmwares’ temporary bank transfers; keep the original files."
   },
   {
    "trigger": "sample_send",
    "owner_text": "Sending, erasing or restoring samples writes the target slot and sectors reached. See the switching advice in this section for the affected saved work. These firmware sample commands have no stopped-transport guard, and the header is erased before a complete upload is validated; an interrupted send can already have lost the old sample, with no undo. These writes can also replace ChoralRoot’s legacy CZ patches 17–32 and FM TONE patches, kept for returning to ChoralRoot 0.21 or older."
   },
   {
    "trigger": "firmware_update",
    "owner_text": "Sending another firmware update from Move erases its update area, including after staging failure, without a separate device question about the previous contents. See the switching advice in this section for the affected saved work. Work newer than the last successful project save or autosave is not flushed before entering the updater. These writes can also remove other firmwares’ unfinished restores and pending updates; keep the original files."
   },
   {
    "trigger": "installer",
    "owner_text": "Installing Move rewrites differing program sectors. See the switching advice in this section for the affected saved work. Its loader also removes only sectors containing a valid update record, which saved music does not hold. Back up Open’s projects and audio in Open before installing Move."
   }
  ],
  "loss_list_basis": {
   "rows": "Historical source references for the retained per-trigger precautions; affected saved work is listed in overwrites_previous, not in per-trigger losses lists.",
   "object_names": "short/holds in flash-atlas/atlas.json and the twelve supplementary storage fragments",
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/storage.c",
     "lines": "30-40",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/storage.c#L30-L40"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/storage.c",
     "lines": "75-87",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/storage.c#L75-L87"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/project.c",
     "lines": "676-764",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L676-L764"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/editor.c",
     "lines": "534-557",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/editor.c#L534-L557"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/projfmt.c",
     "lines": "604-633",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/projfmt.c#L604-L633"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ota.c",
     "lines": "393-408",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ota.c#L393-L408"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/loader/ldr_core.c",
     "lines": "91-103",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/loader/ldr_core.c#L91-L103"
    }
   ]
  },
  "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 presets (128, banks A-D)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns); stock Bluetooth data; stock presets (128, banks A-D).",
    "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": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user presets 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user presets 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: the autosave (the music as you left it); FM6 voice bank B1-B32; settings, button calibration, favourites, MIDI LEARN map; user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32. FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user presets 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user presets 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "the music in progress (autosave) (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample.",
     "FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads FM6 patch bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "FM1 Move reads user sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself, under a condition: user sample slot USR4. At risk when you act: settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01-U16; user sounds U17-U32; FM6 patch bank B1-B27. Carried over: the music in progress (autosave) (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample. FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads FM6 patch bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. FM1 Move reads user sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads break loops slot 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads break loops slot 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads break loops slot 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk when you act: X0X button calibration; the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 1; break loops slot 2; break loops slot 3. FM1 Move reads break loops slot 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads break loops slot 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads break loops slot 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move keeps stored but does not show user sounds U01-U16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sounds U17-U32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "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; music in progress (RESTORE LAST); FM6 voice bank B1-B32; settings, calibration, favourites, MENU options; user sounds U01-U16; user sounds U17-U32. FM1 Move keeps stored but does not show user sounds U01-U16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sounds U17-U32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U127-U144",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U127-U144. At risk when you act: project A: patterns, song, sounds, motion, recordings; project B: 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; settings, factory favourites, calibration, saved template.",
    "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 import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "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 import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "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": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved with a global save",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "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 session saved with a global save; 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.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: music in progress (RESTORE LAST); FM6 voice bank B1–B32; settings and panel calibration; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds 1–16; user sounds 17–32. FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "automatically, only if leftover data is found in the checked spots where firmware updates are prepared",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you start a firmware update from a computer",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: 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)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: octave, last selected preset and MIDI preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "changed to the new format: after Move's next settings save, Hortator cannot read any of its settings and starts with default settings and calibration. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk when you act: settings and panel calibration; user samples USR1; user samples USR2; user samples USR3. FM1 Move reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "pattern 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: pattern 2; pattern 3; pattern 4; pattern 5; pattern 6; pattern 7. At risk when you act: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: Optional QY70 style bank. At risk when you act: Polly shared memory 4; 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": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "some or all lost"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user sound bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sound bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself, under a condition: last session; shared 64-pattern pool (some or all lost). At risk when you act: settings, calibration and favourites; user sample USR1; user sample USR2; user sample USR3; user sound bank 1; user sound bank 2. FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user sound bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sound bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "user presets 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "working loop",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: DX7 bank 1 voices 1–16; DX7 bank 1 voices 17–32; DX7 bank 2 voices 1–16; DX7 bank 2 voices 17–32; DX7 bank 3 voices 1–16; DX7 bank 3 voices 17–32; DX7 bank 4 voices 1–16; DX7 bank 4 voices 17–32; DX7 bank 5 voices 1–16; DX7 bank 5 voices 17–32; DX7 bank 6 voices 1–16; DX7 bank 6 voices 17–32; DX7 bank 7 voices 1–16; DX7 bank 7 voices 17–32; DX7 bank 8 voices 1–16; DX7 bank 8 voices 17–32; selected DX7 bank; MY KIT; settings, calibration, song order, MIDI, theme and favourites; section A (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); section B (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay). FM1 Move keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the last session in the full version of Felucca",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR1 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR2 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR3 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user samples USR1, USR2 and USR3 until you write over them. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user sounds U01–U16, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: the last session in the full version of Felucca; Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes; User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE; user sounds U01–U16, names and sixteen-step patterns without automation; user sounds U17–U32, names and sixteen-step patterns without automation. FM1 Move reads user samples USR1, USR2 and USR3 until you write over them. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user sounds U01–U16, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "duell",
    "name": "DUELL beta",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user wavetable USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M09–M10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M11–M12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M13–M14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M15–M16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P01–P06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P07–P12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P13–P16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working music",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B01–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: user wavetable USR1; user wavetable USR2; user wavetable USR3; saved patches; multis M09–M10; multis M11–M12; multis M13–M14; multis M15–M16; patterns P01–P06; patterns P07–P12; patterns P13–P16; last working music; FM6 bank B01–B32; settings and panel setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FiMba-1 beta panel calibration; FiMba-1 beta sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "maku",
    "name": "MAKU",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "up to sixteen liked worlds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "inherited user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads inherited user sample 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads inherited user sample 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads inherited user sample 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show inherited user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: up to sixteen liked worlds; settings and calibration; inherited user sample 1; inherited user sample 2; inherited user sample 3; inherited user preset bank 1; inherited user preset bank 2. FM1 Move reads inherited user sample 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads inherited user sample 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads inherited user sample 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show inherited user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "learned button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: learned button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "chord",
    "name": "fm1-chord",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: settings, panel calibration, four chord preset setups and the current chord setup; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. FM1 Move reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "working loop (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "After FM1 Move replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample.",
     "FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "FM1 Move reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself, under a condition: DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices). At risk when you act: user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); settings, calibration, song order, synthesized drum kits and DX-bank setup; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27. Carried over: working loop (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). After FM1 Move replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample. FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. FM1 Move reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FuMi-1 button and encoder calibration; FuMi-1 sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jangada",
    "name": "Jangada",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "changed to the new format: The next settings save replaces Jangada’s learned MIDI control assignments with FM1 Move’s kit settings. Jangada can still read the calibration and shared preferences. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk when you act: user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; preferences, calibration and MIDI LEARN map; user samples USR1; user samples USR2; user samples USR3. FM1 Move reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "slice positions you set for USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song order and selection",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: slice positions you set for USR1; slice positions you set for USR2; song 4; song 5; song 6; song 7; song 8; song 9; song 10; song 11; song 12; song order and selection; settings, calibration and favourites; user sample USR1; user sample USR2; user sounds 1–16; user sounds 17–32. FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "orbit",
    "name": "ORBIT",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "USER sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved section A",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "saved section B",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "saved section C",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "saved section D",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a project from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample.",
     "FM1 Move reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "FM1 Move reads sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself, under a condition: USER sounds U01-U16 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); USER sounds U17-U32 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); sample slot USR4; saved section A (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); saved section B (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); saved section C (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); saved section D (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); working music kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences; sample slot USR1; sample slot USR2; sample slot USR3; FM6 bank B1-B27. Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample. FM1 Move reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. FM1 Move reads sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "the working loop kept by autosave (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk when you act: settings, panel calibration and song order; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01–U16; user sounds U17–U32. Carried over: the working loop kept by autosave (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). FM1 Move reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "winampfm",
    "name": "winampFM Synth",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "working music kept by autosave (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample.",
     "FM1 Move reads sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds 1-16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds 17-32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "FM1 Move reads sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself, under a condition: sample USR4. At risk when you act: settings, panel calibration, song order, SYN kits and MIDI; sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27. Carried over: working music kept by autosave (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample. FM1 Move reads sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds 1-16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds 17-32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. FM1 Move reads sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: sixteen six-track patterns (some or all lost); song order and four scenes (some or all lost); eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost); screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk when you act: screen preferences, calibration and favourites; user sample USR1; user sample USR2; user sample USR3; user sounds U01-U16; user sounds U17-U32. FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you install FM1 Move",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions set by hand in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "older user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "If your PIGEON sample bank is large enough to reach the flash that installing FM1 Move writes, PIGEON then rejects the whole bank, both songs and the kit. Export the PIGEON session and audio bank before switching.",
     "FM1 Move reads user sample USR1 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR2 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR3 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show older user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show older user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself, under a condition: shared song and drum sample bank. At risk when you act: slice positions set by hand in the older format; chops, drum-pad and performance edits; last working session; preferences, MIDI LEARN and panel calibration; user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format; older user preset bank 1; older user preset bank 2. If your PIGEON sample bank is large enough to reach the flash that installing FM1 Move writes, PIGEON then rejects the whole bank, both songs and the kit. Export the PIGEON session and audio bank before switching. FM1 Move reads user sample USR1 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR2 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR3 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show older user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show older user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "working music (autosave) (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots.",
     "FM1 Move reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; settings, panel mapping, song order and Quest preferences/progress; sample USR1; user sounds U01–U16; user sounds U17–U32. Carried over: working music (autosave) (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). FM1 Move reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots. FM1 Move reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Groove OS does not publish where or how it stores saved work, so data may be lost even where we cannot confirm shared storage. Before switching, use export all on its Projects page to save every project and the autosave. Use Save a backup on Your own sounds too: project exports remember the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, autosave and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Groove OS does not publish where or how it stores saved work, so data may be lost even where we cannot confirm shared storage. Before switching, use export all on its Projects page to save every project and the autosave. Use Save a backup on Your own sounds too: project exports remember the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, autosave and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost.",
    "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": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "sample slot USR1",
     "sample slot USR2",
     "sample slot USR3",
     "user sounds U01–U16",
     "user sounds U17–U32",
     "FM6 bank B1–B27",
     "project 1",
     "project 2",
     "the working project kept by autosave"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27; project 1; project 2; the working project kept by autosave.",
    "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": [
     "sample slot USR1",
     "sample slot USR2",
     "sample slot USR3",
     "user sounds U01–U16",
     "user sounds U17–U32",
     "FM6 bank B1–B27",
     "project 1",
     "project 2",
     "the working project kept by autosave"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27; project 1; project 2; the working project kept by autosave.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a compatible voice bank sent earlier remains and the saved voice bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change slice positions in SLICE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change slice positions in SLICE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change slice positions in SLICE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca may start with RESTORE LAST ON after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Felucca may start with beta 2ND CORE ON or OFF after FM1 Move. Do not rely on your earlier choice: FM1 Move can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save.",
     "Felucca reads sample slot USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca reads sample slot USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca reads sample slot USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: FM6 bank B1–B27; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3. Felucca may start with RESTORE LAST ON after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Felucca may start with beta 2ND CORE ON or OFF after FM1 Move. Do not rely on your earlier choice: FM1 Move can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save. Felucca reads sample slot USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca reads sample slot USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca reads sample slot USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (FM1 Move’s own settings cannot trigger this update) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send the song from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (FM1 Move’s own settings cannot trigger this update) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send the song from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (FM1 Move’s own settings cannot trigger this update) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send the song from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (FM1 Move’s own settings cannot trigger this update)",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads FM6 bank B1–B27 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27. SLOOP reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads FM6 bank B1–B27 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload samples or break loops (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload samples or break loops (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload samples or break loops (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed.",
     "X0X reads sample slot USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads sample slot USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads sample slot USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used."
    ],
    "owner_text": "At risk by itself: user sounds U17–U32; settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16; sample slot USR1; sample slot USR2; sample slot USR3. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed. X0X reads sample slot USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads sample slot USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads sample slot USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
    "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": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if its RESTORE LAST is on [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if this firmware ran on your FM-1 before and the voice bank sent to it then is still stored",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you mark a favourite with a star (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a project (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you switch song or project (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if its RESTORE LAST is on [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you mark a favourite with a star (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a project (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store a section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you switch song or project (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if its RESTORE LAST is on [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you mark a favourite with a star (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a project (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store a section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you switch song or project (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "JIANT may start with RESTORE LAST ON or OFF after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave."
    ],
    "owner_text": "At risk by itself: sample slot USR3; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk by itself, under a condition: FM6 bank B1–B27. At risk when you act: sample slot USR1; sample slot USR2; user sounds U01–U16; user sounds U17–U32. JIANT may start with RESTORE LAST ON or OFF after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave.",
    "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": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you mark a favourite with a star (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user sounds U01–U16; user sounds U17–U32; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk by itself, under a condition: sample slot USR3; FM6 bank B1–B27. At risk when you act: sample slot USR1; sample slot USR2.",
    "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": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16.",
    "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": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup",
        "effect": "lost"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Undo from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold SAVE for a global save (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place a loop from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Undo from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold SAVE for a global save (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place a loop from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose Undo from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold SAVE for a global save (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place a loop from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ChoralRoot reads user sounds U01–U16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
     "ChoralRoot reads user sounds U17–U32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from."
    ],
    "owner_text": "At risk by itself: sample slot USR2; sample slot USR3; settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: sample slot USR1; user sounds U01–U16; user sounds U17–U32. ChoralRoot reads user sounds U01–U16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from. ChoralRoot reads user sounds U17–U32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
    "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": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an earlier compatible bank sent to the FM-1 is still stored and is newer than the saved bank, or the saved bank is invalid",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change settings from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX may start with RESTORE LAST ON after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave."
    ],
    "owner_text": "At risk by itself: FM6 bank B1–B27; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32. GHOULBOX may start with RESTORE LAST ON after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27; project 1; project 2; the working project kept by autosave; settings, calibration, SYN kits and stored MIDI mappings.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE in the save screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you release a short SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE in the save screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you release a short SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE in the save screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you release a short SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "sample slot USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "sample slot USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "sample slot USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). Carried over: sample slot USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); sample slot USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); sample slot USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 6 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 7 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the working project kept by autosave; settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose COPY SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose COPY SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose COPY SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: sample slot USR1; sample slot USR2; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Unreadable settings use Skiff’s default RESTORE LAST ON.",
     "Skiff reads sample slot USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads sample slot USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads sample slot USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently."
    ],
    "owner_text": "At risk by itself: FM6 bank B1–B27; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; sample slot USR1; sample slot USR2; sample slot USR3. At risk when you act: user sounds U01–U16; user sounds U17–U32. Unreadable settings use Skiff’s default RESTORE LAST ON. Skiff reads sample slot USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads sample slot USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads sample slot USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the active bank from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "sloopDX reads user sounds U01–U16 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them.",
     "sloopDX reads user sounds U17–U32 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them."
    ],
    "owner_text": "At risk by itself: sample slot USR2; settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk by itself, under a condition: sample slot USR1. At risk when you act: user sounds U01–U16; user sounds U17–U32. sloopDX reads user sounds U01–U16 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them. sloopDX reads user sounds U17–U32 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer",
        "effect": "lost"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or a name from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice markers (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or a name from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice markers (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or a name from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice markers (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings or a name from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The full Felucca in Rainbow Mode may start with RESTORE LAST ON after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Rainbow Mode reads sample slot USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Rainbow Mode reads sample slot USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Rainbow Mode reads sample slot USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk by itself, under a condition: FM6 bank B1–B27. At risk when you act: user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3. The full Felucca in Rainbow Mode may start with RESTORE LAST ON after FM1 Move, even if you turned it OFF before. FM1 Move can save its own settings, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Rainbow Mode reads sample slot USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Rainbow Mode reads sample slot USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Rainbow Mode reads sample slot USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if an earlier compatible bank upload is still stored and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change MIDI LEARN (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change preferences from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change MIDI LEARN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you change preferences from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change MIDI LEARN (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change preferences from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (its RESTORE LAST is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change MIDI LEARN (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change preferences from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase."
    ],
    "owner_text": "At risk by itself: FM6 bank B1–B27; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32. The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "maku",
    "name": "MAKU",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap REC to like the current world (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you tap REC to like the current world (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you tap REC to like the current world (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you tap REC to like the current world (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FM6 bank B1–B27; settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "At risk when you act: user sounds U01–U16. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "chord",
    "name": "fm1-chord",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3. fm1-chord reads sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads FM6 bank B1–B27 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2; the working project kept by autosave; settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27. SLOOP DX7 Banks reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads FM6 bank B1–B27 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada's 2ND CORE setting follows your visualizer choice in FM1 Move: AUTO, OFF or BOOST. Only AUTO allows this automatic write. If the saved palette or low-cut value fails Jangada’s checks, it uses the default AUTO.",
     "Jangada reads sample slot USR1 until you write over the saved data.",
     "Jangada reads sample slot USR2 until you write over the saved data.",
     "Jangada reads sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3. Jangada's 2ND CORE setting follows your visualizer choice in FM1 Move: AUTO, OFF or BOOST. Only AUTO allows this automatic write. If the saved palette or low-cut value fails Jangada’s checks, it uses the default AUTO. Jangada reads sample slot USR1 until you write over the saved data. Jangada reads sample slot USR2 until you write over the saved data. Jangada reads sample slot USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice markers (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice markers (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice markers (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "WaveLoop FM-1 reads sample slot USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you.",
     "WaveLoop FM-1 reads sample slot USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk by itself, under a condition: sample slot USR3. At risk when you act: user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2. WaveLoop FM-1 reads sample slot USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you. WaveLoop FM-1 reads sample slot USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a used FM6 patch from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 patch from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a used FM6 patch from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 patch from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a used FM6 patch from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 patch from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "lost"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a used FM6 patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 patch from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ORBIT reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads FM6 bank B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3; FM6 bank B1–B27. ORBIT reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads FM6 bank B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds U01–U16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound)",
     "user sounds U17–U32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "SLOOP Floyd FM reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3. Carried over: user sounds U01–U16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound); user sounds U17–U32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound). SLOOP Floyd FM reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads FM6 bank B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27. winampFM Synth reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads FM6 bank B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS?",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (its autosave is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy to another pattern (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load or remove a screen language pack (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a pattern or Save As (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save song and scenes (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (its autosave is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy to another pattern (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load or remove a screen language pack (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a pattern or Save As (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save song and scenes (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "at an unknown time (the chip maker's code that does this is not public) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (its autosave is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you copy to another pattern (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you load or remove a screen language pack (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a pattern or Save As (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save song and scenes (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "at an unknown time (the chip maker's code that does this is not public) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: sample slot USR1; sample slot USR2; user sounds U01–U16; user sounds U17–U32; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk by itself, under a condition: sample slot USR3. At risk when you act: FM6 bank B1–B27.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you run hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds U01–U16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)",
     "user sounds U17–U32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)"
    ],
    "kept_unseen": [],
    "notes": [
     "Felucca [Salt] reads sample slot USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca [Salt] reads sample slot USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca [Salt] reads sample slot USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3. Carried over: user sounds U01–U16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt); user sounds U17–U32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt). Felucca [Salt] reads sample slot USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca [Salt] reads sample slot USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca [Salt] reads sample slot USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the panel (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "PIGEON reads sample slot USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads sample slot USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads sample slot USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON keeps stored but does not show user sounds U01–U16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
     "PIGEON keeps stored but does not show user sounds U17–U32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them."
    ],
    "owner_text": "At risk by itself: FM6 bank B1–B27; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk by itself, under a condition: sample slot USR1. At risk when you act: sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32. PIGEON reads sample slot USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads sample slot USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads sample slot USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON keeps stored but does not show user sounds U01–U16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them. PIGEON keeps stored but does not show user sounds U17–U32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section A from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H5 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H6 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P5 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P6 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section A from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H5 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H6 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P5 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P6 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section A from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H5 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song H6 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P5 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase training song P6 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send settings with computer commands (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "settings, calibration, SYN kits and stored MIDI mappings",
     "project 1",
     "project 2",
     "the working project kept by autosave",
     "user sounds U01–U16",
     "user sounds U17–U32",
     "FM6 bank B1–B27",
     "sample slot USR1",
     "sample slot USR2",
     "sample slot USR3"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): settings, calibration, SYN kits and stored MIDI mappings; project 1; project 2; the working project kept by autosave; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3. The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Calibration is available",
   "docs_say": "The parity guide says the panel cannot calibrate and suggests returning to SLOOP.",
   "source_says": "Both octave buttons held at startup enter calibration; afterward settings are written only if no record was accepted or current values differ, even when a timeout restored the former panel mapping.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/SLOOP_PARITY.md",
    "lines": "108-108",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/SLOOP_PARITY.md#L108"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/main.c",
    "lines": "182-185",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/main.c#L182-L185"
   },
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/project.c",
     "lines": "1031-1046",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1031-L1046"
    }
   ]
  },
  {
   "topic": "MIDI Program Change is connected",
   "docs_say": "The mapping guide lists MIDI Program Change as unavailable in this build.",
   "source_says": "The input loop polls Program Change requests, and the shared handler loads a sound or drum kit.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/UI_MAPPING.md",
    "lines": "5-7",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/UI_MAPPING.md#L5-L7"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "925-930",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L925-L930"
   }
  },
  {
   "topic": "Drum sequencer navigator",
   "docs_say": "The mapping table assigns ALGORITHM to drum-lane selection on SEQUENCER.",
   "source_says": "ALGORITHM changes the displayed step page on SEQUENCER for drum and synth tracks alike.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/UI_MAPPING.md",
    "lines": "36-39",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/UI_MAPPING.md#L36-L39"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "1104-1109",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1104-L1109"
   }
  },
  {
   "topic": "Groove octave shortcut",
   "docs_say": "The mapping table describes OCT+ as a micro-timing shortcut on GROOVE.",
   "source_says": "There is no GROOVE-specific octave shortcut; the octave handling stays octave shifting on synth tracks or dynamics on drum tracks.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/UI_MAPPING.md",
    "lines": "40-40",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/UI_MAPPING.md#L40"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "1003-1040",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1003-L1040"
   }
  },
  {
   "topic": "Groove commit has no panel gesture",
   "docs_say": "The parity table associates groove commit with the GROOVE screen.",
   "source_says": "A commit action exists, but the panel never requests it; the user guide correctly calls commit engine-only.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/SLOOP_PARITY.md",
    "lines": "48-48",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/SLOOP_PARITY.md#L48"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "448-456",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L448-L456"
   }
  },
  {
   "topic": "Menu hold threshold",
   "docs_say": "The navigation guide gives the HOME menu hold as at least half a second.",
   "source_says": "The input handler waits until the hold exceeds 0.7 seconds.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/UI_NAVIGATION.md",
    "lines": "38-38",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/UI_NAVIGATION.md#L38"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "889-902",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L889-L902"
   }
  },
  {
   "topic": "Lighting settings have no effect on the active panel renderer",
   "docs_say": "The parity guide lists LIGHTS and KEY LIGHTS among the retained settings.",
   "source_says": "Both choices can change on SETTINGS, but the active drawing code never reads KEY LIGHTS and clears every background light mask, so LIGHTS has no visible background lamps to brighten.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/SLOOP_PARITY.md",
    "lines": "104",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/SLOOP_PARITY.md#L104"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "1211-1301",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1211-L1301"
   }
  },
  {
   "topic": "Delete confirmation while playing can report a deletion that did not happen",
   "docs_say": "PROJECT uses REC to delete a saved slot after confirmation.",
   "source_says": "The UI allows the question while playing and reports DELETED after confirmation, but the deletion function returns immediately during playback without erasing the slot.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/UI_MAPPING.md",
    "lines": "55",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/UI_MAPPING.md#L55"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "714-721",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L714-L721"
   },
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "433-436",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L433-L436"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/ui_move_ctl.c",
     "lines": "968-975",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L968-L975"
    }
   ]
  },
  {
   "topic": "SETTINGS persistence",
   "docs_say": "The guide says settings are stored after stopping.",
   "source_says": "The new page only marks a pending settings change. Its writer is inside the disabled arranger branch, so stopping or leaving SETTINGS does not commit it. Calibration and explicit host settings/SYN/MIDI writes can commit the current settings.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/manual/index.html",
    "lines": "673-676",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/manual/index.html#L673-L676"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "365-400",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L365-L400"
   },
   "source": [
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/felucca.c",
     "lines": "51-52",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L52"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/project.c",
     "lines": "1134-1140",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1134-L1140"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/project.c",
     "lines": "1178-1181",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1178-L1181"
    },
    {
     "kind": "source",
     "repo": "nicodesy06/fm1-move",
     "ref": "0.3.1",
     "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
     "path": "firmware/src/project.c",
     "lines": "1231-1243",
     "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L1231-L1243"
    }
   ]
  },
  {
   "topic": "Full backup with MIDI data",
   "docs_say": "The device page offers one file for all unit data and a restore from that file.",
   "source_says": "Firmware includes a separate MIDI object when learned CCs or stored channels differ from default, but the page restore allowlist omits it. That full file is rejected before restore; the protocol itself supports that object.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/device/index.html",
    "lines": "375-388",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/device/index.html#L375-L388"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/device/index.html",
    "lines": "3175-3217",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/device/index.html#L3175-L3217"
   }
  },
  {
   "topic": "Autosave delay",
   "docs_say": "The quick start says stopping and waiting 2.5 seconds keeps the work.",
   "source_says": "The write also needs at least 20 seconds since startup or the previous attempt, quiet audio, no menu and no pending recording/update/restore. A SLOOP USR4 marker blocks it.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/manual/index.html",
    "lines": "190-196",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/manual/index.html#L190-L196"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "723-735",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L723-L735"
   }
  },
  {
   "topic": "A track-own FM6 patch in the project backup",
   "docs_say": "The guide describes project saves as keeping every parameter and the backup as all unit work.",
   "source_says": "A live patch sent to a track changes its FM6 patch buffer, but project serialization writes no raw patch bytes. The full working-project backup uses that same stream. Store it in the FM6 bank or export it separately before power-off.",
   "docs_ref": {
    "kind": "doc",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "docs/manual/index.html",
    "lines": "663-668",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/docs/manual/index.html#L663-L668"
   },
   "source_ref": {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/projfmt.c",
    "lines": "160-173",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/projfmt.c#L160-L173"
   }
  }
 ],
 "not_mapped": [
  "No panel gesture reaches groove commit, humanize reseeding, user groove editing or per-pad timing offsets; these are engine or device-page features rather than hidden panel pages.",
  "Capture and MIDI-output track roles are not panel features in this build; SLOOP’s arranger, visualiser, tools and user-preset saving pages are replaced or absent.",
  "SLOOP’s old page table remains in shared code, but the FM1 Move build uses its own input and screen dispatcher.",
  "Downgrade compatibility was not read in earlier Move source trees; 0.3.1 reading version 1 does not establish that an older reader accepts version 2.",
  "No hardware test of flash writes, interrupted saves, browser restore or calibration.",
  "The firmware package’s optional diagnostic update mode was not verified; update-progress coverage follows the source’s normal default configuration."
 ],
 "saving_note": {
  "project_save": "SAVE on PROJECT writes the selected project slot at once when stopped; a used slot asks for SAVE again within four seconds, an empty slot writes without that question, and saved-project replacement has no undo.",
  "project_limits": "An oversized panel SAVE reports PROJECT TOO DENSE before changing flash; an oversized autosave silently writes nothing, so dense working music can remain only in memory without warning; SLOOP’s fourth-sample marker blocks ordinary project saves and autosaves, while direct project restores bypass it.",
  "clip_limits": "The shared clip memory can fill; then the old stored clip remains and the live pattern is still included in the project, but copying that clip can copy its older stored pattern if keeping the live pattern failed first.",
  "pattern_edits": "Pattern edits and clip changes happen in memory first and can reach the working autosave later; copying or clearing a clip has no undo, while note and step edits use the single pattern undo.",
  "settings": "Ordinary SETTINGS edits do not trigger a flash commit in 0.3.1; metronome changes travel with the project, while device options need a separate settings write to survive a cold start.",
  "source": [
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "820-831",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L820-L831"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "676-735",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L676-L735"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/clip.c",
    "lines": "90-115",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L90-L115"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/clip.c",
    "lines": "201-229",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/clip.c#L201-L229"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "369-400",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L369-L400"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/felucca.c",
    "lines": "51-75",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/felucca.c#L51-L75"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/projfmt.c",
    "lines": "604-621",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/projfmt.c#L604-L621"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "425-428",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L425-L428"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/project.c",
    "lines": "723-735",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/project.c#L723-L735"
   }
  ]
 },
 "input_notes": {
  "tap": "Except HOME, a function-button tap acts on release before 450 ms only if no key or knob was used during that hold; HOME has its own hold rule.",
  "priority": "If several layer buttons are held, the first in this order takes the keys and knobs: FX, EDIT, ARP, SEQ, SEL, GLO, SAVE.",
  "contexts": "Global entries are defaults; a matching page, track kind, held-layer or confirmation context takes precedence; engine-macro contexts apply on PLAY and the first SOUND page.",
  "source": [
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "889-961",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L889-L961"
   },
   {
    "kind": "source",
    "repo": "nicodesy06/fm1-move",
    "ref": "0.3.1",
    "commit": "42fc1af2a2ab6174331d2a4953f7628d6f11b7f8",
    "path": "firmware/src/ui_move_ctl.c",
    "lines": "1046-1070",
    "url": "https://github.com/nicodesy06/fm1-move/blob/42fc1af2a2ab6174331d2a4953f7628d6f11b7f8/firmware/src/ui_move_ctl.c#L1046-L1070"
   }
  ]
 },
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 autosave loss inventory and working restore",
   "fixed": "Rebuilt each trigger’s owner loss list from the storage rows, separated Melodee project D into autosave/working restore, and included all other overlapping saved work with conditional first-copy timing.",
   "at": "switching_note.lost/overwrites_by_trigger; storage.reads_foreign/owner_warnings; guide switching section"
  },
  {
   "round": 1,
   "error": "2 MIDI LEARN sequence and unsaved mappings",
   "fixed": "Corrected enable/turn/send order, warned that learned mappings lack automatic persistence, and added the listening flow and messages.",
   "at": "controls.key_cs4[13]; controls.button_glo[1]; modes.mix_hold; switching_note.kept_on_unit; modes[71]; controls.screen[36..38]"
  },
  {
   "round": 1,
   "error": "3 musical work in settings area",
   "fixed": "Named SLOOP/sloopDX song order, SLOOP SYN kits, Rainbow WRITE song and greeting, and Melodee saved template, including possible rejection/defaults on return.",
   "at": "switching_note.lost/overwrites_by_trigger.settings_write; storage.owner_warnings"
  },
  {
   "round": 1,
   "error": "4 missing deliberate-send victims",
   "fixed": "Included Polly’s optional QY70 bank for user-sound writes, from the fragment rows.",
   "at": "switching_note.lost/overwrites_by_trigger.user_bank/fm6_bank; storage.owner_warnings"
  },
  {
   "round": 1,
   "error": "5 silent oversized autosave",
   "fixed": "Distinguished the panel error message from silent autosave refusal and stated that dense work may remain only in memory.",
   "at": "saving_note.project_limits; switching_note.kept_on_unit; storage.objects.autosave*"
  },
  {
   "round": 1,
   "error": "6 step entry records sounding chords",
   "fixed": "Corrected all 27 entries sharing the handler to include sounding chords in polyphonic chord mode.",
   "at": "controls.key_*: step/press entries"
  },
  {
   "round": 1,
   "error": "7 white-key chord roots follow scale degrees",
   "fixed": "Corrected all sixteen white-key entries to describe scale-degree positions anchored on C4 rather than physical key pitches.",
   "at": "controls.key_*: chord_play/press entries"
  },
  {
   "round": 1,
   "error": "8 load requires stopped transport",
   "fixed": "Added the stopped-only condition and explained refusal after a confirmation during playback.",
   "at": "controls.button_edit[4]"
  },
  {
   "round": 1,
   "error": "9 update entry has no save flush",
   "fixed": "Warned in both the mode and screen entry that entering UBOOT does not save newer work.",
   "at": "modes[30]; controls.screen[30]"
  },
  {
   "round": 1,
   "error": "10 SLOOP working-project import",
   "fixed": "Added startup import of SLOOP’s working project when no Move autosave loads, tracks 1–4, no saved-slot import, and later idle autosave.",
   "at": "switching_note.kept_on_unit; switching_note.source"
  },
  {
   "round": 1,
   "error": "11 calibration skips unchanged accepted settings",
   "fixed": "Made the write conditional on a missing or changed accepted record, including after timeout.",
   "at": "controls.button_oct_down[8]; controls.button_oct_up[6]; disagreements[0]"
  },
  {
   "round": 1,
   "error": "12 sample commands lack stopped check",
   "fixed": "Removed the claimed firmware transport guard while retaining immediate erase/write, browser prompts and interrupted-upload loss.",
   "at": "storage.objects sample_usr1/sample_usr2/sample_usr3 written_when"
  },
  {
   "round": 1,
   "error": "13 held layer wins the function LED",
   "fixed": "Made screen indication conditional on no active layer and cited the single selected function-light rule.",
   "at": "lights.button_fx/sel/edit/glo/save/arp/seq/home[0]"
  },
  {
   "round": 1,
   "error": "14 pattern-length implementation citation",
   "fixed": "Added the actual repeat/halve implementation rather than dispatch alone.",
   "at": "controls.encoder_knob2[34].source"
  },
  {
   "round": 1,
   "error": "15 copied erase-mode wording",
   "fixed": "Rephrased the repeated eight-word sequence in original wording and retained drum/synth behavior.",
   "at": "controls.key_*: eleven black-key ERASE MODE entries"
  },
  {
   "round": 1,
   "error": "16 stray punctuation",
   "fixed": "Removed period-before-semicolon punctuation from all affected held-step knob actions.",
   "at": "controls.encoder_knob1..4: steps_held actions, including encoder_knob2[39]"
  },
  {
   "round": 1,
   "error": "17 release removes one drum lane",
   "fixed": "Distinguished a whole synth step from one selected drum hit and specified when per-step extras are cleared.",
   "at": "controls.key_*: sixteen white-key steps/release entries"
  },
  {
   "round": 1,
   "error": "18 screen names",
   "fixed": "Matched HOLD FX + KEY, CLOCK IN and LIGHTS to the screen text.",
   "at": "modes.perform/settings_clock/settings_lights; related knob labels"
  },
  {
   "round": 1,
   "error": "19 GLO tap does not open tempo overlay",
   "fixed": "Restricted the tap-tempo overlay trigger to the octave-button combination.",
   "at": "modes[26]"
  },
  {
   "round": 1,
   "error": "20 PHYS macro naming",
   "fixed": "Kept ordinary MODAL/STRNG names and described MEMB’s first-macro rename only.",
   "at": "modes[66..68]"
  },
  {
   "round": 1,
   "error": "21 disagreement citation gaps",
   "fixed": "Added screen feedback and disabled-writer evidence and extended the backup-claim citation through line 668.",
   "at": "disagreements[7].source; disagreements[8].source; disagreements[11].docs_ref"
  },
  {
   "round": 1,
   "error": "22 empty release destination",
   "fixed": "Linked installation to the author’s device page hosting the pinned package.",
   "at": "install.official; install.note; registry.option.link; guide introduction"
  },
  {
   "round": 1,
   "error": "23 internal atlas referral",
   "fixed": "Removed the owner referral and stated that Move is absent from Les’s switching table, with complete local warnings and pre-switch backups.",
   "at": "switching_note.lost; guide switching section"
  },
  {
   "round": 1,
   "error": "24 OberVave pattern 1 in spare area",
   "fixed": "Marked the normal FM1M reader/write path as not reading or replacing the spare area.",
   "at": "storage.reads_foreign: obervave.pattern_1"
  },
  {
   "round": 1,
   "error": "25 update-progress screen",
   "fixed": "Appended the reachable transfer-progress screen, phases, numbered failure and dry-run result without moving existing entries.",
   "at": "modes[72]; controls.screen[39]"
  },
  {
   "round": 2,
   "error": "1 Black keys do not write chords",
   "fixed": "Corrected only the eleven black-key step/press actions: chord mode and WHITE scale lock skip note entry, while assigned chord modifiers remain available; white-key chord entry is unchanged.",
   "at": "controls.key_fs3/gs3/as3/cs4/ds4/fs4/gs4/as4/cs5/ds5/fs5[3]"
  },
  {
   "round": 2,
   "error": "2 Inert lighting settings",
   "fixed": "Stated that LIGHTS and KEY LIGHTS change their displayed choices but have no visible LED effect in this build, and aligned both mode descriptions.",
   "at": "controls.encoder_knob1[27..28]; modes.settings_lights/settings_key_lights"
  },
  {
   "round": 2,
   "error": "3 Dry-run message is optional",
   "fixed": "Removed DRY RUN OK from normal update-progress coverage, cited the default-disabled branch, and recorded the unverified packaged diagnostic option.",
   "at": "controls.screen[39]; not_mapped[-1]"
  },
  {
   "round": 2,
   "error": "4 Distinct update screen labels",
   "fixed": "Renamed the countdown/boot screen label to UBOOT while keeping UPDATE for transfer progress, with distinct guide screen prompts.",
   "at": "controls.screen[30].short_label; guide Update countdown/Update progress rows"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_f3[0].short_label",
   "old": "PLAY NOTE",
   "new": "F3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_fs3[0].short_label",
   "old": "PLAY NOTE",
   "new": "F#3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_g3[0].short_label",
   "old": "PLAY NOTE",
   "new": "G3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_gs3[0].short_label",
   "old": "PLAY NOTE",
   "new": "G#3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_a3[0].short_label",
   "old": "PLAY NOTE",
   "new": "A3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_as3[0].short_label",
   "old": "PLAY NOTE",
   "new": "A#3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_b3[0].short_label",
   "old": "PLAY NOTE",
   "new": "B3",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_c4[0].short_label",
   "old": "PLAY NOTE",
   "new": "C4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_cs4[0].short_label",
   "old": "PLAY NOTE",
   "new": "C#4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_d4[0].short_label",
   "old": "PLAY NOTE",
   "new": "D4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_ds4[0].short_label",
   "old": "PLAY NOTE",
   "new": "D#4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_e4[0].short_label",
   "old": "PLAY NOTE",
   "new": "E4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_f4[0].short_label",
   "old": "PLAY NOTE",
   "new": "F4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_fs4[0].short_label",
   "old": "PLAY NOTE",
   "new": "F#4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_g4[0].short_label",
   "old": "PLAY NOTE",
   "new": "G4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_gs4[0].short_label",
   "old": "PLAY NOTE",
   "new": "G#4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_a4[0].short_label",
   "old": "PLAY NOTE",
   "new": "A4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_as4[0].short_label",
   "old": "PLAY NOTE",
   "new": "A#4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_b4[0].short_label",
   "old": "PLAY NOTE",
   "new": "B4",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_c5[0].short_label",
   "old": "PLAY NOTE",
   "new": "C5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_cs5[0].short_label",
   "old": "PLAY NOTE",
   "new": "C#5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_d5[0].short_label",
   "old": "PLAY NOTE",
   "new": "D5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_ds5[0].short_label",
   "old": "PLAY NOTE",
   "new": "D#5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_e5[0].short_label",
   "old": "PLAY NOTE",
   "new": "E5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_f5[0].short_label",
   "old": "PLAY NOTE",
   "new": "F5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_fs5[0].short_label",
   "old": "PLAY NOTE",
   "new": "F#5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_g5[0].short_label",
   "old": "PLAY NOTE",
   "new": "G5",
   "why": "firmware/src/seq.c:1707-1748@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r2",
   "at": "controls.button_oct_down[0].short_label",
   "old": "OCTAVE DOWN",
   "new": "OCT −",
   "why": "firmware/src/ui_move_ctl.c:1032-1039@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  },
  {
   "round": "overlay-fix-r2",
   "at": "controls.button_oct_up[0].short_label",
   "old": "OCTAVE UP",
   "new": "OCT +",
   "why": "firmware/src/ui_move_ctl.c:1032-1039@42fc1af2a2ab6174331d2a4953f7628d6f11b7f8"
  }
 ],
 "checker_disputes_refresh": []
}