user: Demonstrate the C code that generates the assembly output below:

```asm
<CreateUmtsInterleaver>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x310,%rsp
  mov    %edi,-0x2f4(%rbp)
  mov    %rsi,-0x300(%rbp)
  mov    %rdx,-0x308(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x7,-0x1b0(%rbp)
  movl   $0xb,-0x1ac(%rbp)
  movl   $0xd,-0x1a8(%rbp)
  movl   $0x11,-0x1a4(%rbp)
  movl   $0x13,-0x1a0(%rbp)
  movl   $0x17,-0x19c(%rbp)
  movl   $0x1d,-0x198(%rbp)
  movl   $0x1f,-0x194(%rbp)
  movl   $0x25,-0x190(%rbp)
  movl   $0x29,-0x18c(%rbp)
  movl   $0x2b,-0x188(%rbp)
  movl   $0x2f,-0x184(%rbp)
  movl   $0x35,-0x180(%rbp)
  movl   $0x3b,-0x17c(%rbp)
  movl   $0x3d,-0x178(%rbp)
  movl   $0x43,-0x174(%rbp)
  movl   $0x47,-0x170(%rbp)
  movl   $0x49,-0x16c(%rbp)
  movl   $0x4f,-0x168(%rbp)
  movl   $0x53,-0x164(%rbp)
  movl   $0x59,-0x160(%rbp)
  movl   $0x61,-0x15c(%rbp)
  movl   $0x65,-0x158(%rbp)
  movl   $0x67,-0x154(%rbp)
  movl   $0x6b,-0x150(%rbp)
  movl   $0x6d,-0x14c(%rbp)
  movl   $0x71,-0x148(%rbp)
  movl   $0x7f,-0x144(%rbp)
  movl   $0x83,-0x140(%rbp)
  movl   $0x89,-0x13c(%rbp)
  movl   $0x8b,-0x138(%rbp)
  movl   $0x95,-0x134(%rbp)
  movl   $0x97,-0x130(%rbp)
  movl   $0x9d,-0x12c(%rbp)
  movl   $0xa3,-0x128(%rbp)
  movl   $0xa7,-0x124(%rbp)
  movl   $0xad,-0x120(%rbp)
  movl   $0xb3,-0x11c(%rbp)
  movl   $0xb5,-0x118(%rbp)
  movl   $0xbf,-0x114(%rbp)
  movl   $0xc1,-0x110(%rbp)
  movl   $0xc5,-0x10c(%rbp)
  movl   $0xc7,-0x108(%rbp)
  movl   $0xd3,-0x104(%rbp)
  movl   $0xdf,-0x100(%rbp)
  movl   $0xe3,-0xfc(%rbp)
  movl   $0xe5,-0xf8(%rbp)
  movl   $0xe9,-0xf4(%rbp)
  movl   $0xef,-0xf0(%rbp)
  movl   $0xf1,-0xec(%rbp)
  movl   $0xfb,-0xe8(%rbp)
  movl   $0x101,-0xe4(%rbp)
  movl   $0x3,-0xe0(%rbp)
  movl   $0x2,-0xdc(%rbp)
  movl   $0x2,-0xd8(%rbp)
  movl   $0x3,-0xd4(%rbp)
  movl   $0x2,-0xd0(%rbp)
  movl   $0x5,-0xcc(%rbp)
  movl   $0x2,-0xc8(%rbp)
  movl   $0x3,-0xc4(%rbp)
  movl   $0x2,-0xc0(%rbp)
  movl   $0x6,-0xbc(%rbp)
  movl   $0x3,-0xb8(%rbp)
  movl   $0x5,-0xb4(%rbp)
  movl   $0x2,-0xb0(%rbp)
  movl   $0x2,-0xac(%rbp)
  movl   $0x2,-0xa8(%rbp)
  movl   $0x2,-0xa4(%rbp)
  movl   $0x7,-0xa0(%rbp)
  movl   $0x5,-0x9c(%rbp)
  movl   $0x3,-0x98(%rbp)
  movl   $0x2,-0x94(%rbp)
  movl   $0x3,-0x90(%rbp)
  movl   $0x5,-0x8c(%rbp)
  movl   $0x2,-0x88(%rbp)
  movl   $0x5,-0x84(%rbp)
  movl   $0x2,-0x80(%rbp)
  movl   $0x6,-0x7c(%rbp)
  movl   $0x3,-0x78(%rbp)
  movl   $0x3,-0x74(%rbp)
  movl   $0x2,-0x70(%rbp)
  movl   $0x3,-0x6c(%rbp)
  movl   $0x2,-0x68(%rbp)
  movl   $0x2,-0x64(%rbp)
  movl   $0x6,-0x60(%rbp)
  movl   $0x5,-0x5c(%rbp)
  movl   $0x2,-0x58(%rbp)
  movl   $0x5,-0x54(%rbp)
  movl   $0x2,-0x50(%rbp)
  movl   $0x2,-0x4c(%rbp)
  movl   $0x2,-0x48(%rbp)
  movl   $0x13,-0x44(%rbp)
  movl   $0x5,-0x40(%rbp)
  movl   $0x2,-0x3c(%rbp)
  movl   $0x3,-0x38(%rbp)
  movl   $0x2,-0x34(%rbp)
  movl   $0x3,-0x30(%rbp)
  movl   $0x2,-0x2c(%rbp)
  movl   $0x6,-0x28(%rbp)
  movl   $0x3,-0x24(%rbp)
  movl   $0x7,-0x20(%rbp)
  movl   $0x7,-0x1c(%rbp)
  movl   $0x6,-0x18(%rbp)
  movl   $0x3,-0x14(%rbp)
  movl   $0x4,-0x2a0(%rbp)
  movl   $0x3,-0x29c(%rbp)
  movl   $0x2,-0x298(%rbp)
  movl   $0x1,-0x294(%rbp)
  movl   $0x0,-0x290(%rbp)
  movl   $0x9,-0x280(%rbp)
  movl   $0x8,-0x27c(%rbp)
  movl   $0x7,-0x278(%rbp)
  movl   $0x6,-0x274(%rbp)
  movl   $0x5,-0x270(%rbp)
  movl   $0x4,-0x26c(%rbp)
  movl   $0x3,-0x268(%rbp)
  movl   $0x2,-0x264(%rbp)
  movl   $0x1,-0x260(%rbp)
  movl   $0x0,-0x25c(%rbp)
  movl   $0x13,-0x250(%rbp)
  movl   $0x9,-0x24c(%rbp)
  movl   $0xe,-0x248(%rbp)
  movl   $0x4,-0x244(%rbp)
  movl   $0x0,-0x240(%rbp)
  movl   $0x2,-0x23c(%rbp)
  movl   $0x5,-0x238(%rbp)
  movl   $0x7,-0x234(%rbp)
  movl   $0xc,-0x230(%rbp)
  movl   $0x12,-0x22c(%rbp)
  movl   $0x10,-0x228(%rbp)
  movl   $0xd,-0x224(%rbp)
  movl   $0x11,-0x220(%rbp)
  movl   $0xf,-0x21c(%rbp)
  movl   $0x3,-0x218(%rbp)
  movl   $0x1,-0x214(%rbp)
  movl   $0x6,-0x210(%rbp)
  movl   $0xb,-0x20c(%rbp)
  movl   $0x8,-0x208(%rbp)
  movl   $0xa,-0x204(%rbp)
  movl   $0x13,-0x200(%rbp)
  movl   $0x9,-0x1fc(%rbp)
  movl   $0xe,-0x1f8(%rbp)
  movl   $0x4,-0x1f4(%rbp)
  movl   $0x0,-0x1f0(%rbp)
  movl   $0x2,-0x1ec(%rbp)
  movl   $0x5,-0x1e8(%rbp)
  movl   $0x7,-0x1e4(%rbp)
  movl   $0xc,-0x1e0(%rbp)
  movl   $0x12,-0x1dc(%rbp)
  movl   $0xa,-0x1d8(%rbp)
  movl   $0x8,-0x1d4(%rbp)
  movl   $0xd,-0x1d0(%rbp)
  movl   $0x11,-0x1cc(%rbp)
  movl   $0x3,-0x1c8(%rbp)
  movl   $0x1,-0x1c4(%rbp)
  movl   $0x10,-0x1c0(%rbp)
  movl   $0x6,-0x1bc(%rbp)
  movl   $0xf,-0x1b8(%rbp)
  movl   $0xb,-0x1b4(%rbp)
  cmpl   $0x27,-0x2f4(%rbp)
  jle    L712
  cmpl   $0x9f,-0x2f4(%rbp)
  jg     L712
  movl   $0x5,-0x2f0(%rbp)
  jmp    L573
L712:
  cmpl   $0x9f,-0x2f4(%rbp)
  jle    L577
  cmpl   $0xc8,-0x2f4(%rbp)
  jg     L577
  movl   $0xa,-0x2f0(%rbp)
  jmp    L573
L577:
  cmpl   $0x1e0,-0x2f4(%rbp)
  jle    L435
  cmpl   $0x212,-0x2f4(%rbp)
  jg     L435
  movl   $0xa,-0x2f0(%rbp)
  jmp    L573
L435:
  movl   $0x14,-0x2f0(%rbp)
L573:
  cmpl   $0x1e0,-0x2f4(%rbp)
  jle    L612
  cmpl   $0x212,-0x2f4(%rbp)
  jg     L612
  movl   $0x35,-0x2dc(%rbp)
  mov    -0x2dc(%rbp),%eax
  mov    %eax,-0x2ec(%rbp)
  movl   $0x2,-0x2d8(%rbp)
  jmp    L131
L612:
  movl   $0x0,-0x2e8(%rbp)
  jmp    L725
L688:
  mov    -0x2e8(%rbp),%eax
  cltq
  mov    -0x1b0(%rbp,%rax,4),%eax
  add    $0x1,%eax
  imul   -0x2f0(%rbp),%eax
  cmp    %eax,-0x2f4(%rbp)
  jle    L726
  addl   $0x1,-0x2e8(%rbp)
L725:
  cmpl   $0x33,-0x2e8(%rbp)
  jle    L688
  jmp    L543
L726:
  nop
L543:
  mov    -0x2e8(%rbp),%eax
  cltq
  mov    -0x1b0(%rbp,%rax,4),%eax
  mov    %eax,-0x2dc(%rbp)
  mov    -0x2e8(%rbp),%eax
  cltq
  mov    -0xe0(%rbp,%rax,4),%eax
  mov    %eax,-0x2d8(%rbp)
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x2f0(%rbp),%eax
  cmp    %eax,-0x2f4(%rbp)
  jg     L718
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x2ec(%rbp)
  jmp    L131
L718:
  mov    -0x2f0(%rbp),%eax
  imul   -0x2dc(%rbp),%eax
  cmp    %eax,-0x2f4(%rbp)
  jle    L52
  mov    -0x2dc(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2ec(%rbp)
  jmp    L131
L52:
  mov    -0x2dc(%rbp),%eax
  mov    %eax,-0x2ec(%rbp)
L131:
  mov    -0x2f0(%rbp),%eax
  imul   -0x2ec(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x2d0(%rbp)
  mov    -0x2f0(%rbp),%eax
  imul   -0x2ec(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x2c8(%rbp)
  mov    -0x2f0(%rbp),%eax
  imul   -0x2ec(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x2c0(%rbp)
  movl   $0x0,-0x2e8(%rbp)
  movl   $0x0,-0x2e4(%rbp)
  jmp    L679
L348:
  movl   $0x0,-0x2e0(%rbp)
  jmp    L505
L513:
  mov    -0x2e8(%rbp),%eax
  cmp    -0x2f4(%rbp),%eax
  jge    L249
  mov    -0x2e8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x300(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  jmp    L553
L249:
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  add    %rdx,%rax
  movl   $0xffffffff,(%rax)
L553:
  addl   $0x1,-0x2e8(%rbp)
  addl   $0x1,-0x2e0(%rbp)
L505:
  mov    -0x2e0(%rbp),%eax
  cmp    -0x2ec(%rbp),%eax
  jl     L513
  addl   $0x1,-0x2e4(%rbp)
L679:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L348
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x2b8(%rbp)
  mov    -0x2b8(%rbp),%rax
  movl   $0x1,(%rax)
  movl   $0x1,-0x2e0(%rbp)
  jmp    L709
L840:
  mov    -0x2e0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x2b8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x2d8(%rbp),%eax
  mov    -0x2e0(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x2b8(%rbp),%rdx
  add    %rdx,%rcx
  cltd
  idivl  -0x2dc(%rbp)
  mov    %edx,%eax
  mov    %eax,(%rcx)
  addl   $0x1,-0x2e0(%rbp)
L709:
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L840
  mov    -0x2f0(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x2b0(%rbp)
  mov    -0x2b0(%rbp),%rax
  movl   $0x1,(%rax)
  movl   $0x0,-0x2e8(%rbp)
  movl   $0x1,-0x2e4(%rbp)
  jmp    L415
L537:
  mov    -0x2e8(%rbp),%eax
  mov    %eax,-0x2d4(%rbp)
  mov    -0x2d4(%rbp),%eax
  mov    %eax,-0x2e8(%rbp)
  jmp    L26
L339:
  mov    -0x2dc(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x2e8(%rbp),%eax
  cltq
  mov    -0x1b0(%rbp,%rax,4),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <gcd@plt>
  cmp    $0x1,%eax
  jne    L304
  mov    -0x2e8(%rbp),%eax
  cltq
  mov    -0x1b0(%rbp,%rax,4),%edx
  mov    -0x2e4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rcx
  mov    -0x2b0(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L304
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b0(%rbp),%rax
  add    %rax,%rdx
  mov    -0x2e8(%rbp),%eax
  cltq
  mov    -0x1b0(%rbp,%rax,4),%eax
  mov    %eax,(%rdx)
  jmp    L762
L304:
  addl   $0x1,-0x2e8(%rbp)
L26:
  cmpl   $0x33,-0x2e8(%rbp)
  jle    L339
L762:
  addl   $0x1,-0x2e4(%rbp)
L415:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L537
  mov    -0x2f0(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x2a8(%rbp)
  cmpl   $0x5,-0x2f0(%rbp)
  jne    L758
  movl   $0x0,-0x2e4(%rbp)
  jmp    L338
L20:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x2a0(%rbp,%rax,4),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e4(%rbp)
L338:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L20
  jmp    L74
L758:
  cmpl   $0xa,-0x2f0(%rbp)
  jne    L97
  movl   $0x0,-0x2e4(%rbp)
  jmp    L653
L621:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x280(%rbp,%rax,4),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e4(%rbp)
L653:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L621
  jmp    L74
L97:
  cmpl   $0x8e8,-0x2f4(%rbp)
  jle    L632
  cmpl   $0x9b0,-0x2f4(%rbp)
  jle    L646
L632:
  cmpl   $0xc58,-0x2f4(%rbp)
  jle    L540
  cmpl   $0xc8a,-0x2f4(%rbp)
  jg     L540
L646:
  movl   $0x0,-0x2e4(%rbp)
  jmp    L598
L450:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x250(%rbp,%rax,4),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e4(%rbp)
L598:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L450
  jmp    L74
L540:
  movl   $0x0,-0x2e4(%rbp)
  jmp    L756
L297:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x200(%rbp,%rax,4),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e4(%rbp)
L756:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L297
L74:
  movl   $0x0,-0x2e4(%rbp)
  jmp    L342
L254:
  mov    -0x2ec(%rbp),%eax
  cmp    -0x2dc(%rbp),%eax
  jne    L157
  movl   $0x0,-0x2e0(%rbp)
  jmp    L179
L715:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x2e0(%rbp),%eax
  mov    -0x2dc(%rbp),%edx
  lea    -0x1(%rdx),%ecx
  cltd
  idiv   %ecx
  mov    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2e8(%rbp)
  mov    -0x2e8(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e0(%rbp)
L179:
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L715
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  add    %rdx,%rax
  mov    -0x2dc(%rbp),%edx
  sub    $0x1,%edx
  mov    %edx,%ecx
  imul   -0x2f0(%rbp),%ecx
  mov    -0x2e4(%rbp),%edx
  add    %ecx,%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x2c0(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  jmp    L527
L157:
  mov    -0x2dc(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x2ec(%rbp)
  jne    L448
  movl   $0x0,-0x2e0(%rbp)
  jmp    L428
L522:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x2e0(%rbp),%eax
  mov    -0x2dc(%rbp),%edx
  lea    -0x1(%rdx),%ecx
  cltd
  idiv   %ecx
  mov    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2e8(%rbp)
  mov    -0x2e8(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e0(%rbp)
L428:
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L522
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  add    %rdx,%rax
  mov    -0x2dc(%rbp),%edx
  sub    $0x1,%edx
  mov    %edx,%ecx
  imul   -0x2f0(%rbp),%ecx
  mov    -0x2e4(%rbp),%edx
  add    %ecx,%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x2c0(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x2dc(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2dc(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  mov    -0x2f0(%rbp),%eax
  imul   -0x2ec(%rbp),%eax
  cmp    %eax,-0x2f4(%rbp)
  jne    L527
  mov    -0x2f0(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x2e4(%rbp)
  jne    L527
  mov    -0x2f0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2d4(%rbp)
  mov    -0x2f0(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x2f0(%rbp),%eax
  imul   -0x2dc(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rdx,%rax
  mov    -0x2f0(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  lea    -0x4(%rdx),%rcx
  mov    -0x2c0(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x2f0(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x2f0(%rbp),%eax
  imul   -0x2dc(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rax,%rdx
  mov    -0x2d4(%rbp),%eax
  mov    %eax,(%rdx)
  jmp    L527
L448:
  movl   $0x0,-0x2e0(%rbp)
  jmp    L591
L293:
  mov    -0x2e4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x2e0(%rbp),%eax
  mov    -0x2dc(%rbp),%edx
  lea    -0x1(%rdx),%ecx
  cltd
  idiv   %ecx
  mov    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2b8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  sub    $0x1,%eax
  mov    %eax,-0x2e8(%rbp)
  mov    -0x2e8(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2d0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e0(%rbp)
L591:
  mov    -0x2dc(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L293
L527:
  addl   $0x1,-0x2e4(%rbp)
L342:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L254
  movl   $0x0,-0x2e4(%rbp)
  jmp    L223
L284:
  cmpl   $0x5,-0x2f0(%rbp)
  jne    L487
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x2a0(%rbp,%rax,4),%eax
  mov    %eax,-0x2e8(%rbp)
  jmp    L641
L487:
  cmpl   $0xa,-0x2f0(%rbp)
  jne    L10
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x280(%rbp,%rax,4),%eax
  mov    %eax,-0x2e8(%rbp)
  jmp    L641
L10:
  cmpl   $0x8e8,-0x2f4(%rbp)
  jle    L263
  cmpl   $0x9b0,-0x2f4(%rbp)
  jle    L269
L263:
  cmpl   $0xc58,-0x2f4(%rbp)
  jle    L201
  cmpl   $0xc8a,-0x2f4(%rbp)
  jg     L201
L269:
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x250(%rbp,%rax,4),%eax
  mov    %eax,-0x2e8(%rbp)
  jmp    L641
L201:
  mov    -0x2e4(%rbp),%eax
  cltq
  mov    -0x200(%rbp,%rax,4),%eax
  mov    %eax,-0x2e8(%rbp)
L641:
  movl   $0x0,-0x2e0(%rbp)
  jmp    L602
L367:
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e8(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c0(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c8(%rbp),%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e0(%rbp)
L602:
  mov    -0x2e0(%rbp),%eax
  cmp    -0x2ec(%rbp),%eax
  jl     L367
  addl   $0x1,-0x2e4(%rbp)
L223:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L284
  movl   $0x0,-0x2e8(%rbp)
  movl   $0x0,-0x2e0(%rbp)
  jmp    L166
L388:
  movl   $0x0,-0x2e4(%rbp)
  jmp    L93
L741:
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  js     L71
  mov    -0x2e0(%rbp),%eax
  imul   -0x2f0(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2e4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x2c8(%rbp),%rax
  add    %rdx,%rax
  mov    -0x2e8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x308(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x2e8(%rbp)
L71:
  addl   $0x1,-0x2e4(%rbp)
L93:
  mov    -0x2e4(%rbp),%eax
  cmp    -0x2f0(%rbp),%eax
  jl     L741
  addl   $0x1,-0x2e0(%rbp)
L166:
  mov    -0x2e0(%rbp),%eax
  cmp    -0x2ec(%rbp),%eax
  jl     L388
  mov    -0x2d0(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2c8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2c0(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2b8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2b0(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2a8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L309
  call   <__stack_chk_fail@plt>
L309:
  leave
  ret
```

assistant: ```c
void CreateUmtsInterleaver(int LL, int *input, int *output) {
  int RR, CC;
  int index, i, j, itemp;
  int pValue, vValue;
  int pTable[52] = {7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257};
  int vTable[52] = {3, 2, 2, 3, 2, 5, 2, 3, 2, 6, 3, 5, 2, 2, 2, 2, 7, 5, 3, 2, 3, 5, 2, 5, 2, 6, 3, 3, 2, 3, 2, 2, 6, 5, 2, 5, 2, 2, 2, 19, 5, 2, 3, 2, 3, 2, 6, 3, 7, 7, 6, 3};
  int T5[5] = {4, 3, 2, 1, 0};
  int T10[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
  int T20a[20] = {19, 9, 14, 4, 0, 2, 5, 7, 12, 18, 16, 13, 17, 15, 3, 1, 6, 11, 8, 10};
  int T20b[20] = {19, 9, 14, 4, 0, 2, 5, 7, 12, 18, 10, 8, 13, 17, 3, 1, 16, 6, 15, 11};
  int *Matrix, *IntraMatrix, *InterMatrix, *s, *q, *r;
  if ((40 <= LL) && (LL <= 159)) {
    RR = 5;
  } else if ((160 <= LL) && (LL <= 200)) {
    RR = 10;
  } else if ((481 <= LL) && (LL <= 530)) {
    RR = 10;
  } else {
    RR = 20;
  }
  if ((481 <= LL) && (LL <= 530)) {
    pValue = 53;
    CC = pValue;
    vValue = 2;
  } else {
    for (index = 0; index < 52; index++) {
      if (LL <= RR * (pTable[index] + 1)) {
        break;
      }
    }
    pValue = pTable[index];
    vValue = vTable[index];
    if (LL <= RR * (pValue - 1)) {
      CC = pValue - 1;
    } else if (RR * pValue < LL) {
      CC = pValue + 1;
    } else {
      CC = pValue;
    }
  }
  Matrix = calloc(RR * CC, sizeof(int));
  InterMatrix = calloc(RR * CC, sizeof(int));
  IntraMatrix = calloc(RR * CC, sizeof(int));
  index = 0;
  for (i = 0; i < RR; i++) {
    for (j = 0; j < CC; j++) {
      if (index < LL) {
        Matrix[i + j * RR] = input[index];
      } else {
        Matrix[i + j * RR] = -1;
      }
      index++;
    }
  }
  s = calloc(pValue - 1, sizeof(int));
  s[0] = 1;
  for (j = 1; j < pValue - 1; j++) {
    s[j] = (vValue * s[j - 1]) % pValue;
  }
  q = calloc(RR, sizeof(int));
  q[0] = 1;
  index = 0;
  for (i = 1; i < RR; i++) {
    itemp = index;
    for (index = itemp; index < 52; index++) {
      if ((gcd(pTable[index], pValue - 1) == 1) && (pTable[index] > q[i - 1])) {
        q[i] = pTable[index];
        break;
      }
    }
  }
  r = calloc(RR, sizeof(int));
  if (RR == 5) {
    for (i = 0; i < RR; i++) {
      r[T5[i]] = q[i];
    }
  } else if (RR == 10) {
    for (i = 0; i < RR; i++) {
      r[T10[i]] = q[i];
    }
  } else if (((2281 <= LL) && (LL <= 2480)) || ((3161 <= LL) && (LL <= 3210))) {
    for (i = 0; i < RR; i++) {
      r[T20a[i]] = q[i];
    }
  } else {
    for (i = 0; i < RR; i++) {
      r[T20b[i]] = q[i];
    }
  }
  for (i = 0; i < RR; i++) {
    if (CC == pValue) {
      for (j = 0; j <= pValue - 2; j++) {
        index = s[(j * r[i]) % (pValue - 1)];
        IntraMatrix[i + j * RR] = Matrix[i + index * RR];
      }
      IntraMatrix[i + (pValue - 1) * RR] = Matrix[i];
    } else if (CC == pValue + 1) {
      for (j = 0; j <= pValue - 2; j++) {
        index = s[(j * r[i]) % (pValue - 1)];
        IntraMatrix[i + j * RR] = Matrix[i + index * RR];
      }
      IntraMatrix[i + (pValue - 1) * RR] = Matrix[i];
      IntraMatrix[i + pValue * RR] = Matrix[i + pValue * RR];
      if ((LL == RR * CC) && (i == RR - 1)) {
        itemp = IntraMatrix[RR - 1];
        IntraMatrix[RR - 1] = IntraMatrix[(RR - 1) + RR * pValue];
        IntraMatrix[(RR - 1) + RR * pValue] = itemp;
      }
    } else {
      for (j = 0; j <= pValue - 2; j++) {
        index = s[(j * r[i]) % (pValue - 1)] - 1;
        IntraMatrix[i + j * RR] = Matrix[i + index * RR];
      }
    }
  }
  for (i = 0; i < RR; i++) {
    if (RR == 5) {
      index = T5[i];
    } else if (RR == 10) {
      index = T10[i];
    } else if (((2281 <= LL) && (LL <= 2480)) || ((3161 <= LL) && (LL <= 3210))) {
      index = T20a[i];
    } else {
      index = T20b[i];
    }
    for (j = 0; j < CC; j++) {
      InterMatrix[i + j * RR] = IntraMatrix[index + j * RR];
    }
  }
  index = 0;
  for (j = 0; j < CC; j++) {
    for (i = 0; i < RR; i++) {
      if (InterMatrix[i + j * RR] >= 0) {
        output[index] = InterMatrix[i + j * RR];
        index++;
      }
    }
  }
  free(Matrix);
  free(InterMatrix);
  free(IntraMatrix);
  free(s);
  free(q);
  free(r);
}
```