user: What would the C source look like for the assembly code provided here?

```asm
<iface_midi_router_set_program>:
  endbr64
  push   %rbp
  mov    %edi,%ebp
  mov    %ebp,%esi
  cmp    $0x15,%ebp
  ja     L14
  mov    $0x1,%edi
  call   <config_store_set_val@plt>
  cmp    $0x14,%ebp
  ja     L69
  lea    D3(%rip),%rdx
  movslq (%rdx,%rbp,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L14:
  lea    D1(%rip),%rdi
  pop    %rbp
  jmp    1090 <log_error@plt>
  nopl   (%rax)
  mov    $0x3,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nop
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
L106:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  cs nopw 0x0(%rax,%rax,1)
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L106
  nopl   0x0(%rax)
  mov    $0x2,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  xchg   %ax,%ax
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
L85:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x10,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L85
  nopl   0x0(%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L77:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L77
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L16:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
L33:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x2,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L16
  nopl   (%rax)
  mov    $0x1,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L33
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0x1,%esi
L64:
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x10,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x11,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x12,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  jmp    L64
  cs nopw 0x0(%rax,%rax,1)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L93:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x1,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0x10,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L93
  nopw   0x0(%rax,%rax,1)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L68:
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L68
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xfffffffe,%esi
L67:
  mov    $0x1,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x2,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  mov    $0x3,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xffffffff,%esi
  xor    %edi,%edi
  call   <cvproc_set_pair_mode@plt>
  mov    $0xffffffff,%esi
  jmp    L67
  nopw   0x0(%rax,%rax,1)
  mov    $0x3,%edi
  call   <cvproc_set_pairs@plt>
  mov    $0xfffffffe,%esi
  xor    %edi,%edi
  pop    %rbp
  jmp    1080 <cvproc_set_pair_mode@plt>
L69:
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: label: D1
datatype: string

tool: D1: imrsp - prog invalid: %d

assistant: ```c
void iface_midi_router_set_program(int prog) {
  if (prog < 0 || prog > 21) {
    log_error("imrsp - prog invalid: %d", prog);
    return;
  }
  config_store_set_val(1, prog);
  switch (prog) {
  case 0:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -1);
    cvproc_set_pair_mode(3, -1);
    break;
  case 1:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -1);
    cvproc_set_pair_mode(3, -1);
    break;
  case 2:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -1);
    cvproc_set_pair_mode(3, -2);
    break;
  case 3:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -2);
    cvproc_set_pair_mode(3, -2);
    break;
  case 4:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, 1);
    cvproc_set_pair_mode(3, 16);
    break;
  case 5:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, 1);
    cvproc_set_pair_mode(3, 16);
    break;
  case 6:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, 16);
    cvproc_set_pair_mode(2, 17);
    cvproc_set_pair_mode(3, 18);
    break;
  case 7:
    cvproc_set_pairs(0);
    cvproc_set_pair_mode(0, 1);
    cvproc_set_pair_mode(1, 16);
    cvproc_set_pair_mode(2, 17);
    cvproc_set_pair_mode(3, 18);
    break;
  case 8:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -1);
    break;
  case 9:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -2);
    break;
  case 10:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, -1);
    break;
  case 11:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, -2);
    break;
  case 12:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    cvproc_set_pair_mode(2, 1);
    break;
  case 13:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    cvproc_set_pair_mode(2, 1);
    break;
  case 14:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, 1);
    cvproc_set_pair_mode(2, 16);
    break;
  case 15:
    cvproc_set_pairs(1);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, 1);
    cvproc_set_pair_mode(2, 16);
    break;
  case 16:
    cvproc_set_pairs(2);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -1);
    break;
  case 17:
    cvproc_set_pairs(2);
    cvproc_set_pair_mode(0, -1);
    cvproc_set_pair_mode(1, -2);
    break;
  case 18:
    cvproc_set_pairs(2);
    cvproc_set_pair_mode(0, -2);
    cvproc_set_pair_mode(1, -2);
    break;
  case 19:
    cvproc_set_pairs(3);
    cvproc_set_pair_mode(0, -1);
    break;
  case 20:
    cvproc_set_pairs(3);
    cvproc_set_pair_mode(0, -2);
    break;
  }
}
```