user: What is the c source code of the assembly code below:

```asm
<c1_look_ahead_test>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %esi,%r13d
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,0x38(%rsp)
  mov    %edx,0x30(%rsp)
  mov    %r8d,0x2c(%rsp)
  cmp    $0x1,%ecx
  je     L296
  cmp    $0x4,%ecx
  je     L147
  jle    L242
  cmp    $0x5,%ecx
  je     L599
  cmp    $0x6,%ecx
  jne    L510
  pxor   %xmm4,%xmm4
L152:
  movss  D261(%rip),%xmm6
  movaps %xmm6,%xmm1
  movaps %xmm6,%xmm2
L150:
  movss  D72(%rip),%xmm5
  movaps %xmm6,%xmm3
  movaps %xmm5,%xmm7
L241:
  mov    0x30(%rsp),%r14d
  cmp    %r13d,%r14d
  jge    L846
  movslq %r14d,%r15
  lea    0x8(%r14),%ebp
  add    0x38(%rsp),%r15
  movss  %xmm6,0x34(%rsp)
  nopl   (%rax)
L745:
  movzbl (%r15),%r12d
  mov    %r12d,%edx
  test   %r12b,%r12b
  js     L632
  lea    -0x30(%r12),%ecx
  cmp    $0x9,%cl
  ja     L114
  addss  D324(%rip),%xmm7
  cmp    $0x20,%r12b
  je     L795
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  addsd  %xmm0,%xmm3
  cvtsd2ss %xmm3,%xmm3
L752:
  mov    %r12d,%eax
  mov    $0x1,%esi
L705:
  cvtss2sd %xmm2,%xmm2
  addsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm2
L327:
  test   %dl,%dl
  js     L575
  test   %esi,%esi
  jne    L417
  movsd  D182(%rip),%xmm0
L717:
  cvtss2sd %xmm2,%xmm2
  addsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm2
L417:
  cmp    $0xd,%al
  je     L794
  cmp    $0x2a,%al
  jne    L819
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm1,%xmm1
  mov    $0x1,%ecx
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
L553:
  test   %dl,%dl
  js     L636
  test   %ecx,%ecx
  jne    L784
  cvtss2sd %xmm1,%xmm1
  addsd  D135(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  jmp    L784
  cs nopw 0x0(%rax,%rax,1)
L632:
  sub    $0x7f,%r12d
  mov    %r12d,%ebx
L767:
  movaps %xmm7,%xmm0
  movss  %xmm1,0x20(%rsp)
  movss  %xmm4,0x18(%rsp)
  movss  %xmm2,0x10(%rsp)
  movss  %xmm3,0x8(%rsp)
  movss  %xmm5,(%rsp)
  call   <froundup@plt>
  movzbl (%r15),%eax
  movss  (%rsp),%xmm5
  lea    -0x30(%r12),%ecx
  movss  0x8(%rsp),%xmm3
  movss  0x10(%rsp),%xmm2
  movaps %xmm0,%xmm7
  test   %al,%al
  movss  0x18(%rsp),%xmm4
  movss  0x20(%rsp),%xmm1
  mov    %eax,%edx
  js     L682
  addss  %xmm5,%xmm7
L496:
  cmp    $0x20,%r12b
  je     L701
  xor    %esi,%esi
  cmp    $0x9,%cl
  jbe    L220
L628:
  lea    -0x41(%r12),%r8d
  cmp    $0x19,%r8b
  ja     L206
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  addsd  %xmm0,%xmm3
  cvtsd2ss %xmm3,%xmm3
  test   %dl,%dl
  js     L358
L560:
  cmp    $0x20,%bl
  je     L720
  nopl   0x0(%rax)
L700:
  cmp    $0x9,%cl
  jbe    L735
  sub    $0x61,%r12d
  cmp    $0x19,%r12b
  ja     L327
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm2,%xmm2
  addsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm2
  test   %dl,%dl
  jns    L417
  movsd  D182(%rip),%xmm0
  cvtss2sd %xmm2,%xmm2
  addsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm2
L819:
  cmp    $0x3e,%al
  jne    L345
L51:
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm1,%xmm1
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  test   %dl,%dl
  js     L636
L784:
  cmp    $0x5b,%al
  jne    L52
  mov    0x2c(%rsp),%eax
  test   %eax,%eax
  jne    L728
L52:
  add    $0x1,%r14d
  addss  %xmm5,%xmm4
  cmp    %r14d,%r13d
  je     L697
L21:
  add    $0x1,%r15
  cmp    %ebp,%r14d
  jle    L745
  movaps %xmm7,%xmm0
  movss  %xmm4,0x20(%rsp)
  movss  %xmm1,0x2c(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm3,(%rsp)
  call   <froundup@plt>
  movss  (%rsp),%xmm3
  movss  %xmm0,0x18(%rsp)
  movaps %xmm3,%xmm0
  call   <froundup@plt>
  movss  0x8(%rsp),%xmm2
  movss  %xmm0,0x10(%rsp)
  movaps %xmm2,%xmm0
  call   <froundup@plt>
  movss  0x2c(%rsp),%xmm1
  movss  %xmm0,0x8(%rsp)
  movaps %xmm1,%xmm0
  call   <froundup@plt>
  movss  0x20(%rsp),%xmm4
  movss  %xmm0,(%rsp)
  movaps %xmm4,%xmm0
  call   <froundup@plt>
  movss  (%rsp),%xmm6
  movss  0x8(%rsp),%xmm2
  movss  0x10(%rsp),%xmm3
  movss  0x18(%rsp),%xmm5
L25:
  movsd  D377(%rip),%xmm4
  pxor   %xmm8,%xmm8
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm2,%xmm2
  cvtss2sd %xmm6,%xmm8
  movapd %xmm8,%xmm7
  cvtss2sd %xmm5,%xmm1
  pxor   %xmm5,%xmm5
  addsd  %xmm4,%xmm7
  cvtss2sd %xmm3,%xmm5
  comisd %xmm7,%xmm1
  jb     L641
  comisd %xmm7,%xmm5
  jae    L182
L641:
  mov    $0x1,%eax
  cvtss2sd %xmm0,%xmm0
L840:
  movapd %xmm5,%xmm7
  addsd  %xmm4,%xmm7
  comisd %xmm7,%xmm1
  jb     L107
  comisd %xmm7,%xmm2
  jb     L107
  comiss %xmm3,%xmm6
  ja     L208
  ucomiss %xmm6,%xmm3
  jp     L107
  je     L236
  nopl   (%rax)
L107:
  movapd %xmm2,%xmm3
  addsd  %xmm4,%xmm3
  comisd %xmm3,%xmm1
  jb     L494
  comisd %xmm3,%xmm5
  jb     L494
  comisd %xmm3,%xmm0
  jb     L494
  ucomisd %xmm3,%xmm8
  mov    $0x4,%edx
  cmovae %edx,%eax
  nopw   0x0(%rax,%rax,1)
L494:
  movapd %xmm1,%xmm3
  addsd  %xmm4,%xmm3
  comisd %xmm3,%xmm0
  jb     L801
  comisd %xmm3,%xmm5
  jb     L801
  comisd %xmm3,%xmm2
  jb     L801
  ucomisd %xmm3,%xmm8
  mov    $0x1,%edx
  cmovae %edx,%eax
  nopw   0x0(%rax,%rax,1)
L801:
  addsd  %xmm4,%xmm0
  comisd %xmm0,%xmm1
  jb     L264
  comisd %xmm0,%xmm5
  jb     L264
  comisd %xmm0,%xmm2
  jb     L264
  comisd %xmm0,%xmm8
  jae    L62
L264:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L220:
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  addsd  %xmm0,%xmm3
  cvtsd2ss %xmm3,%xmm3
  test   %al,%al
  jns    L71
  mov    $0x1,%esi
L373:
  movsd  D182(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  addsd  %xmm0,%xmm3
  cvtsd2ss %xmm3,%xmm3
L477:
  test   %esi,%esi
  jne    L560
L358:
  movsd  D182(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  addsd  %xmm0,%xmm3
  cvtsd2ss %xmm3,%xmm3
  cmp    $0x20,%bl
  jne    L700
L720:
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm2,%xmm2
  addsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm2
  cmp    $0x9,%cl
  jbe    L705
  jmp    L327
  nopl   0x0(%rax)
L794:
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm1,%xmm1
  mov    $0x1,%ecx
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
L370:
  lea    -0x41(%rax),%esi
  cmp    $0x19,%sil
  ja     L553
  cvtss2sd %xmm1,%xmm1
  addsd  D252(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  test   %dl,%dl
  jns    L52
L636:
  cvtss2sd %xmm1,%xmm1
  addsd  D365(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  jmp    L784
L345:
  cmp    $0x20,%al
  je     L51
  lea    -0x30(%rax),%ecx
  cmp    $0x9,%cl
  ja     L427
  movsd  D252(%rip),%xmm0
  cvtss2sd %xmm1,%xmm1
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  test   %dl,%dl
  jns    L52
  cvtss2sd %xmm1,%xmm1
  addsd  D365(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  jmp    L784
  nopl   0x0(%rax,%rax,1)
L795:
  mov    $0x20,%eax
L701:
  cvtss2sd %xmm3,%xmm3
  mov    $0x20,%ebx
  mov    $0x1,%esi
  movsd  D252(%rip),%xmm0
  addsd  %xmm0,%xmm3
  cvtsd2ss %xmm3,%xmm3
  jmp    L628
  nopl   0x0(%rax,%rax,1)
L575:
  movsd  D182(%rip),%xmm0
  cvtss2sd %xmm2,%xmm2
  addsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm2
  test   %esi,%esi
  je     L717
  jmp    L819
  nopl   0x0(%rax)
L728:
  add    $0x1,%r14d
  addss  D254(%rip),%xmm4
  cmp    %r14d,%r13d
  jne    L21
  nopl   (%rax)
L697:
  movaps %xmm7,%xmm0
  movss  %xmm4,0x20(%rsp)
  movss  %xmm1,(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm3,0x10(%rsp)
  call   <froundup@plt>
  movss  0x10(%rsp),%xmm3
  movss  %xmm0,0x18(%rsp)
  movaps %xmm3,%xmm0
  call   <froundup@plt>
  movss  0x8(%rsp),%xmm2
  movss  %xmm0,0x10(%rsp)
  movaps %xmm2,%xmm0
  call   <froundup@plt>
  movss  (%rsp),%xmm1
  movss  %xmm0,0x8(%rsp)
  movaps %xmm1,%xmm0
  call   <froundup@plt>
  movss  0x20(%rsp),%xmm4
  movss  %xmm0,(%rsp)
  movaps %xmm4,%xmm0
  call   <froundup@plt>
  movss  (%rsp),%xmm6
  movss  0x8(%rsp),%xmm2
  movss  0x10(%rsp),%xmm3
  movss  0x18(%rsp),%xmm5
L1:
  cvttss2si %xmm6,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  mov    $0x1,%eax
  comiss %xmm2,%xmm1
  jb     L444
  cvttss2si %xmm2,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  mov    $0x4,%eax
L444:
  comiss %xmm3,%xmm1
  jb     L69
  cvttss2si %xmm3,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  mov    $0x2,%eax
L69:
  comiss %xmm5,%xmm1
  jb     L762
  cvttss2si %xmm5,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  mov    $0x1,%eax
L762:
  comiss %xmm0,%xmm1
  jb     L264
L62:
  add    $0x48,%rsp
  mov    $0x6,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L682:
  addss  0x34(%rsp),%xmm7
  jmp    L496
  nopl   0x0(%rax,%rax,1)
L242:
  movss  D261(%rip),%xmm6
  movss  D254(%rip),%xmm4
  movaps %xmm6,%xmm1
  movaps %xmm6,%xmm2
  cmp    $0x2,%ecx
  jne    L150
  movss  D72(%rip),%xmm5
  pxor   %xmm3,%xmm3
  movaps %xmm5,%xmm7
  jmp    L241
  nopl   0x0(%rax,%rax,1)
L599:
  movss  D261(%rip),%xmm6
  movss  D72(%rip),%xmm5
  pxor   %xmm1,%xmm1
  movss  D254(%rip),%xmm4
  movaps %xmm6,%xmm2
  movaps %xmm6,%xmm3
  movaps %xmm5,%xmm7
  jmp    L241
  nopw   0x0(%rax,%rax,1)
L296:
  movss  D72(%rip),%xmm5
  movss  D261(%rip),%xmm6
  pxor   %xmm7,%xmm7
  movaps %xmm6,%xmm4
  movaps %xmm5,%xmm1
  movaps %xmm5,%xmm2
  movaps %xmm5,%xmm3
  jmp    L241
  nopl   (%rax)
L147:
  movss  D261(%rip),%xmm6
  movss  D72(%rip),%xmm5
  pxor   %xmm2,%xmm2
  movss  D254(%rip),%xmm4
  movaps %xmm6,%xmm1
  movaps %xmm6,%xmm3
  movaps %xmm5,%xmm7
  jmp    L241
  nopw   0x0(%rax,%rax,1)
L182:
  cvtss2sd %xmm0,%xmm0
  comisd %xmm7,%xmm0
  mov    $0x1,%eax
  jb     L840
  comisd %xmm7,%xmm2
  sbb    %eax,%eax
  and    $0xfffffffc,%eax
  add    $0x5,%eax
  jmp    L840
L846:
  movaps %xmm7,%xmm0
  movss  %xmm4,0x20(%rsp)
  movss  %xmm1,0x2c(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm3,(%rsp)
  call   <froundup@plt>
  movss  (%rsp),%xmm3
  movss  %xmm0,0x18(%rsp)
  movaps %xmm3,%xmm0
  call   <froundup@plt>
  movss  0x8(%rsp),%xmm2
  movss  %xmm0,0x10(%rsp)
  movaps %xmm2,%xmm0
  call   <froundup@plt>
  movss  0x2c(%rsp),%xmm1
  movss  %xmm0,0x8(%rsp)
  movaps %xmm1,%xmm0
  call   <froundup@plt>
  movss  0x20(%rsp),%xmm4
  movss  %xmm0,(%rsp)
  movaps %xmm4,%xmm0
  call   <froundup@plt>
  cmp    %r13d,0x30(%rsp)
  movss  (%rsp),%xmm6
  movss  0x8(%rsp),%xmm2
  movss  0x10(%rsp),%xmm3
  movss  0x18(%rsp),%xmm5
  jne    L25
  jmp    L1
L208:
  mov    $0x2,%eax
  jmp    L107
L236:
  mov    0x30(%rsp),%edx
  mov    0x38(%rsp),%rdi
  mov    %r13d,%esi
  movsd  %xmm0,0x20(%rsp)
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm8,(%rsp)
  call   <dq4bi@plt>
  movsd  (%rsp),%xmm8
  movsd  0x8(%rsp),%xmm1
  test   %rax,%rax
  mov    D377(%rip),%rax
  movsd  0x10(%rsp),%xmm5
  movsd  0x18(%rsp),%xmm2
  movsd  0x20(%rsp),%xmm0
  movq   %rax,%xmm4
  je     L208
  mov    $0x5,%eax
  jmp    L107
L427:
  xor    %ecx,%ecx
  jmp    L370
L510:
  movss  D254(%rip),%xmm4
  jmp    L152
L735:
  movsd  D252(%rip),%xmm0
  jmp    L705
L206:
  test   %dl,%dl
  jns    L477
  jmp    L373
L114:
  mov    %r12d,%ebx
  jmp    L767
L71:
  mov    %eax,%r12d
  jmp    L752
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D261
type_guessed: f32
name: extract_symbolic_data
arguments: data_label: D72
type_guessed: f32
name: extract_symbolic_data
arguments: data_label: D324
type_guessed: f32
name: extract_symbolic_data
arguments: data_label: D252
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D182
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D135
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D377
type_guessed: f32[2]
name: extract_symbolic_data
arguments: data_label: D365
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D254
type_guessed: f32

tool: D261: 2

tool: D72: 1

tool: D324: 0.5

tool: {"D252": [0x55,0x55,0x55,0x55,0x55,0x55,0xe5,0x3f]}

tool: {"D182": [0x55,0x55,0x55,0x55,0x55,0x55,0xf5,0x3f]}

tool: {"D135": [0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0x0a,0x40]}

tool: {"D377": [0.0,1.875]}

tool: {"D365": [0x55,0x55,0x55,0x55,0x55,0x55,0x11,0x40]}

tool: D254: 3

assistant: ```c
int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int current_mode, int gs1) {
  float ascii_count, c40_count, text_count, edi_count, byte_count;
  char reduced_char;
  int done, best_scheme, best_count, sp;
  if (current_mode == 1) {
    ascii_count = 0.0;
    c40_count = 1.0;
    text_count = 1.0;
    edi_count = 1.0;
    byte_count = 2.0;
  } else {
    ascii_count = 1.0;
    c40_count = 2.0;
    text_count = 2.0;
    edi_count = 2.0;
    byte_count = 3.0;
  }
  switch (current_mode) {
  case 2:
    c40_count = 0.0;
    break;
  case 4:
    text_count = 0.0;
    break;
  case 6:
    byte_count = 0.0;
    break;
  case 5:
    edi_count = 0.0;
    break;
  }
  for (sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) {
    if (source[sp] <= 127) {
      reduced_char = source[sp];
    } else {
      reduced_char = source[sp] - 127;
    }
    if ((source[sp] >= '0') && (source[sp] <= '9')) {
      ascii_count += 0.5;
    } else {
      ascii_count = froundup(ascii_count);
      if (source[sp] > 127) {
        ascii_count += 2.0;
      } else {
        ascii_count += 1.0;
      }
    }
    done = 0;
    if (reduced_char == ' ') {
      c40_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= '0') && (reduced_char <= '9')) {
      c40_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= 'A') && (reduced_char <= 'Z')) {
      c40_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] > 127) {
      c40_count += (4.0 / 3.0);
    }
    if (done == 0) {
      c40_count += (4.0 / 3.0);
    }
    done = 0;
    if (reduced_char == ' ') {
      text_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= '0') && (reduced_char <= '9')) {
      text_count += (2.0 / 3.0);
      done = 1;
    }
    if ((reduced_char >= 'a') && (reduced_char <= 'z')) {
      text_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] > 127) {
      text_count += (4.0 / 3.0);
    }
    if (done == 0) {
      text_count += (4.0 / 3.0);
    }
    done = 0;
    if (source[sp] == 13) {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] == '*') {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] == '>') {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] == ' ') {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if ((source[sp] >= '0') && (source[sp] <= '9')) {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if ((source[sp] >= 'A') && (source[sp] <= 'Z')) {
      edi_count += (2.0 / 3.0);
      done = 1;
    }
    if (source[sp] > 127) {
      edi_count += (13.0 / 3.0);
    } else {
      if (done == 0) {
        edi_count += (10.0 / 3.0);
      }
    }
    if (gs1 && (source[sp] == '[')) {
      byte_count += 3.0;
    } else {
      byte_count += 1.0;
    }
  }
  ascii_count = froundup(ascii_count);
  c40_count = froundup(c40_count);
  text_count = froundup(text_count);
  edi_count = froundup(edi_count);
  byte_count = froundup(byte_count);
  best_scheme = 1;
  if (sp == sourcelen) {
    best_count = edi_count;
    if (text_count <= best_count) {
      best_count = text_count;
      best_scheme = 4;
    }
    if (c40_count <= best_count) {
      best_count = c40_count;
      best_scheme = 2;
    }
    if (ascii_count <= best_count) {
      best_count = ascii_count;
      best_scheme = 1;
    }
    if (byte_count <= best_count) {
      best_count = byte_count;
      best_scheme = 6;
    }
  } else {
    if (((edi_count + 1.0 <= ascii_count) && (edi_count + 1.0 <= c40_count)) && ((edi_count + 1.0 <= byte_count) && (edi_count + 1.0 <= text_count))) {
      best_scheme = 5;
    }
    if ((c40_count + 1.0 <= ascii_count) && (c40_count + 1.0 <= text_count)) {
      if (c40_count < edi_count) {
        best_scheme = 2;
      } else {
        done = 0;
        if (c40_count == edi_count) {
          if (dq4bi(source, sourcelen, position)) {
            best_scheme = 5;
          } else {
            best_scheme = 2;
          }
        }
      }
    }
    if (((text_count + 1.0 <= ascii_count) && (text_count + 1.0 <= c40_count)) && ((text_count + 1.0 <= byte_count) && (text_count + 1.0 <= edi_count))) {
      best_scheme = 4;
    }
    if (((ascii_count + 1.0 <= byte_count) && (ascii_count + 1.0 <= c40_count)) && ((ascii_count + 1.0 <= text_count) && (ascii_count + 1.0 <= edi_count))) {
      best_scheme = 1;
    }
    if (((byte_count + 1.0 <= ascii_count) && (byte_count + 1.0 <= c40_count)) && ((byte_count + 1.0 <= text_count) && (byte_count + 1.0 <= edi_count))) {
      best_scheme = 6;
    }
  }
  return best_scheme;
}
```