#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ packed;

/* Variables and functions */
int atoi(char const *);
scalar_t__ isdigit(char);
char *strchr(char *, char);
int strlen(char *);
int /*<<< orphan*/ strncpy(char *, char const *, int);
char toupper(char);
void wsprEncode(const char *call, const char *l_pre, const char *dbm,
                unsigned char *symbols) {
  char *c, buf[16];
  strncpy(buf, call, 16);
  c = buf;
  for (int i = 0; i < strlen(c); i++)
    c[i] = toupper(c[i]);
  unsigned long ng, nadd = 0;
  if (strchr(c, '/')) {
    nadd = 2;
    int i = strchr(c, '/') - c;
    int n = strlen(c) - i - 1;
    c[i] = '\0';
    if (n == 1)
      ng = 60000 - 32768 +
           (c[i + 1] >= '0' && c[i + 1] <= '9' ? c[i + 1] - '0'
            : c[i + 1] == ' '                  ? 38
                                               : c[i + 1] - 'A' + 10);
    if (n == 2)
      ng = 60000 + 26 + 10 * (c[i + 1] - '0') + (c[i + 2] - '0');
    if (n > 2) {
      ng = (i < 3                                ? 36
            : c[i - 3] >= '0' && c[i - 3] <= '9' ? c[i - 3] - '0'
                                                 : c[i - 3] - 'A' + 10);
      ng = 37 * ng + (i < 2 ? 36
                      : c[i - 2] >= '0' && c[i - 2] <= '9'
                          ? c[i - 2] - '0'
                          : c[i - 2] - 'A' + 10);
      ng = 37 * ng + (i < 1 ? 36
                      : c[i - 1] >= '0' && c[i - 1] <= '9'
                          ? c[i - 1] - '0'
                          : c[i - 1] - 'A' + 10);
      if (ng < 32768)
        nadd = 1;
      else
        ng = ng - 32768;
      c = c + i + 1;
    }
  }
  int i = (isdigit(c[2]) ? 2 : isdigit(c[1]) ? 1 : 0);
  int n = strlen(c) - i - 1;
  unsigned long n1;
  n1 = (i < 2                                ? 36
        : c[i - 2] >= '0' && c[i - 2] <= '9' ? c[i - 2] - '0'
                                             : c[i - 2] - 'A' + 10);
  n1 = 36 * n1 + (i < 1                                ? 36
                  : c[i - 1] >= '0' && c[i - 1] <= '9' ? c[i - 1] - '0'
                                                       : c[i - 1] - 'A' + 10);
  n1 = 10 * n1 + c[i] - '0';
  n1 = 27 * n1 + (n < 1 ? 26 : c[i + 1] - 'A');
  n1 = 27 * n1 + (n < 2 ? 26 : c[i + 2] - 'A');
  n1 = 27 * n1 + (n < 3 ? 26 : c[i + 3] - 'A');
  if (!nadd) {
    char l[4];
    strncpy(l, l_pre, 4);
    for (int i = 0; i < strlen(l); i++)
      l[i] = toupper(l[i]);
    ng = 180 * (179 - 10 * (l[0] - 'A') - (l[2] - '0')) + 10 * (l[1] - 'A') +
         (l[3] - '0');
  }
  int p = atoi(dbm);
  int corr[] = {0, -1, 1, 0, -1, 2, 1, 0, -1, 1};
  p = p > 60 ? 60 : p < 0 ? 0 : p + corr[p % 10];
  unsigned long n2 = (ng << 7) | (p + 64 + nadd);
  char packed[11] = {n1 >> 20,
                     n1 >> 12,
                     n1 >> 4,
                     ((n1 & 0x0f) << 4) | ((n2 >> 18) & 0x0f),
                     n2 >> 10,
                     n2 >> 2,
                     (n2 & 0x03) << 6,
                     0,
                     0,
                     0,
                     0};
  int k = 0;
  int j, s;
  long nstate = 0;
  unsigned char symbol[176];
  for (j = 0; j != sizeof(packed); j++) {
    for (i = 7; i >= 0; i--) {
      unsigned long poly[2] = {0xf2d05351L, 0xe4613c47L};
      nstate = (nstate << 1) | ((packed[j] >> i) & 1);
      for (s = 0; s != 2; s++) {
        unsigned long n = nstate & poly[s];
        int even = 0;
        while (n) {
          even = 1 - even;
          n = n & (n - 1);
        }
        symbol[k] = even;
        k++;
      }
    }
  }
  const unsigned char npr3[162] = {
      1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1,
      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
      1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0,
      1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0,
      0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,
      0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,
      0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0};
  for (i = 0; i != 162; i++) {
    unsigned char j0;
    p = -1;
    for (k = 0; p != i; k++) {
      for (j = 0; j != 8; j++)
        j0 = ((k >> j) & 1) | (j0 << 1);
      if (j0 < 162)
        p++;
    }
    symbols[j0] = npr3[j0] | symbol[i] << 1;
  }
}


x86 assembly (clang, -O0):
<wsprEncode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2f0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
lea    -0x40(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    $0x10,%edx
call   1030 <strncpy@plt>
lea    -0x40(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x258(%rbp)
mov    -0x28(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,%ecx
mov    -0x258(%rbp),%eax
cmp    %ecx,%eax
jge    11fa <wsprEncode+0x8a>
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1050 <toupper@plt>
mov    %al,%dl
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    11ac <wsprEncode+0x3c>
movq   $0x0,-0x58(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x2f,%esi
call   1070 <strchr@plt>
cmp    $0x0,%rax
je     15ba <wsprEncode+0x44a>
movq   $0x2,-0x58(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x2f,%esi
call   1070 <strchr@plt>
mov    -0x28(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x5c(%rbp)
mov    -0x28(%rbp),%rdi
call   1060 <strlen@plt>
sub    -0x5c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
cmpl   $0x1,-0x60(%rbp)
jne    1319 <wsprEncode+0x1a9>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12b5 <wsprEncode+0x145>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     12b5 <wsprEncode+0x145>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x25c(%rbp)
jmp    1308 <wsprEncode+0x198>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    12df <wsprEncode+0x16f>
mov    $0x26,%eax
mov    %eax,-0x260(%rbp)
jmp    12fc <wsprEncode+0x18c>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x260(%rbp)
mov    -0x260(%rbp),%eax
mov    %eax,-0x25c(%rbp)
mov    -0x25c(%rbp),%eax
add    $0x6a60,%eax
cltq
mov    %rax,-0x50(%rbp)
cmpl   $0x2,-0x60(%rbp)
jne    135b <wsprEncode+0x1eb>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
imul   $0xa,%eax,%eax
add    $0xea7a,%eax
mov    -0x28(%rbp),%rcx
mov    -0x5c(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x50(%rbp)
cmpl   $0x2,-0x60(%rbp)
jle    15b5 <wsprEncode+0x445>
cmpl   $0x3,-0x5c(%rbp)
jge    137f <wsprEncode+0x20f>
mov    $0x24,%eax
mov    %eax,-0x264(%rbp)
jmp    13fb <wsprEncode+0x28b>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     13d2 <wsprEncode+0x262>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     13d2 <wsprEncode+0x262>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x268(%rbp)
jmp    13ef <wsprEncode+0x27f>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x268(%rbp)
mov    -0x268(%rbp),%eax
mov    %eax,-0x264(%rbp)
mov    -0x264(%rbp),%eax
cltq
mov    %rax,-0x50(%rbp)
imul   $0x25,-0x50(%rbp),%rax
mov    %rax,-0x270(%rbp)
cmpl   $0x2,-0x5c(%rbp)
jge    142d <wsprEncode+0x2bd>
mov    $0x24,%eax
mov    %eax,-0x274(%rbp)
jmp    14a9 <wsprEncode+0x339>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1480 <wsprEncode+0x310>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1480 <wsprEncode+0x310>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x278(%rbp)
jmp    149d <wsprEncode+0x32d>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x278(%rbp)
mov    -0x278(%rbp),%eax
mov    %eax,-0x274(%rbp)
mov    -0x270(%rbp),%rax
mov    -0x274(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
imul   $0x25,-0x50(%rbp),%rax
mov    %rax,-0x280(%rbp)
cmpl   $0x1,-0x5c(%rbp)
jge    14e6 <wsprEncode+0x376>
mov    $0x24,%eax
mov    %eax,-0x284(%rbp)
jmp    1562 <wsprEncode+0x3f2>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1539 <wsprEncode+0x3c9>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1539 <wsprEncode+0x3c9>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x288(%rbp)
jmp    1556 <wsprEncode+0x3e6>
mov    -0x28(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x288(%rbp)
mov    -0x288(%rbp),%eax
mov    %eax,-0x284(%rbp)
mov    -0x280(%rbp),%rax
mov    -0x284(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
cmpq   $0x8000,-0x50(%rbp)
jae    1594 <wsprEncode+0x424>
movq   $0x1,-0x58(%rbp)
jmp    15a2 <wsprEncode+0x432>
mov    -0x50(%rbp),%rax
sub    $0x8000,%rax
mov    %rax,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x5c(%rbp),%rcx
add    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    15ba <wsprEncode+0x44a>
mov    -0x28(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1040 <isdigit@plt>
cmp    $0x0,%rax
je     15e1 <wsprEncode+0x471>
mov    $0x2,%eax
mov    %eax,-0x28c(%rbp)
jmp    1605 <wsprEncode+0x495>
mov    -0x28(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <isdigit@plt>
mov    %rax,%rdx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%rdx
cmovne %ecx,%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%rdi
call   1060 <strlen@plt>
sub    -0x64(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x2,-0x64(%rbp)
jge    163a <wsprEncode+0x4ca>
mov    $0x24,%eax
mov    %eax,-0x290(%rbp)
jmp    16b6 <wsprEncode+0x546>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     168d <wsprEncode+0x51d>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     168d <wsprEncode+0x51d>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x294(%rbp)
jmp    16aa <wsprEncode+0x53a>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x294(%rbp)
mov    -0x294(%rbp),%eax
mov    %eax,-0x290(%rbp)
mov    -0x290(%rbp),%eax
cltq
mov    %rax,-0x70(%rbp)
imul   $0x24,-0x70(%rbp),%rax
mov    %rax,-0x2a0(%rbp)
cmpl   $0x1,-0x64(%rbp)
jge    16e8 <wsprEncode+0x578>
mov    $0x24,%eax
mov    %eax,-0x2a4(%rbp)
jmp    1764 <wsprEncode+0x5f4>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     173b <wsprEncode+0x5cb>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     173b <wsprEncode+0x5cb>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x2a8(%rbp)
jmp    1758 <wsprEncode+0x5e8>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x2a8(%rbp)
mov    -0x2a8(%rbp),%eax
mov    %eax,-0x2a4(%rbp)
mov    -0x2a0(%rbp),%rax
mov    -0x2a4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
imul   $0xa,-0x70(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq -0x64(%rbp),%rdx
movsbq (%rcx,%rdx,1),%rcx
add    %rcx,%rax
sub    $0x30,%rax
mov    %rax,-0x70(%rbp)
imul   $0x1b,-0x70(%rbp),%rax
mov    %rax,-0x2b0(%rbp)
cmpl   $0x1,-0x68(%rbp)
jge    17be <wsprEncode+0x64e>
mov    $0x1a,%eax
mov    %eax,-0x2b4(%rbp)
jmp    17d8 <wsprEncode+0x668>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
mov    %eax,-0x2b4(%rbp)
mov    -0x2b0(%rbp),%rax
mov    -0x2b4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
imul   $0x1b,-0x70(%rbp),%rax
mov    %rax,-0x2c0(%rbp)
cmpl   $0x2,-0x68(%rbp)
jge    1815 <wsprEncode+0x6a5>
mov    $0x1a,%eax
mov    %eax,-0x2c4(%rbp)
jmp    182f <wsprEncode+0x6bf>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
mov    %eax,-0x2c4(%rbp)
mov    -0x2c0(%rbp),%rax
mov    -0x2c4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
imul   $0x1b,-0x70(%rbp),%rax
mov    %rax,-0x2d0(%rbp)
cmpl   $0x3,-0x68(%rbp)
jge    186c <wsprEncode+0x6fc>
mov    $0x1a,%eax
mov    %eax,-0x2d4(%rbp)
jmp    1886 <wsprEncode+0x716>
mov    -0x28(%rbp),%rax
mov    -0x64(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
mov    %eax,-0x2d4(%rbp)
mov    -0x2d0(%rbp),%rax
mov    -0x2d4(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
cmpq   $0x0,-0x58(%rbp)
jne    1944 <wsprEncode+0x7d4>
lea    -0x74(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    $0x4,%edx
call   1030 <strncpy@plt>
movl   $0x0,-0x78(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0x2d8(%rbp)
lea    -0x74(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,%ecx
mov    -0x2d8(%rbp),%eax
cmp    %ecx,%eax
jge    1909 <wsprEncode+0x799>
movslq -0x78(%rbp),%rax
movsbl -0x74(%rbp,%rax,1),%edi
call   1050 <toupper@plt>
mov    %al,%cl
movslq -0x78(%rbp),%rax
mov    %cl,-0x74(%rbp,%rax,1)
mov    -0x78(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    18c1 <wsprEncode+0x751>
movsbl -0x74(%rbp),%eax
sub    $0x41,%eax
imul   $0xa,%eax,%ecx
mov    $0xb3,%eax
sub    %ecx,%eax
movsbl -0x72(%rbp),%ecx
sub    $0x30,%ecx
sub    %ecx,%eax
imul   $0xb4,%eax,%eax
movsbl -0x73(%rbp),%ecx
sub    $0x41,%ecx
imul   $0xa,%ecx,%ecx
add    %ecx,%eax
movsbl -0x71(%rbp),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x50(%rbp)
mov    -0x18(%rbp),%rdi
call   1090 <atoi@plt>
mov    %eax,-0x7c(%rbp)
lea    -0xb0(%rbp),%rdi
lea    0x6a2(%rip),%rsi
mov    $0x28,%edx
call   1080 <memcpy@plt>
cmpl   $0x3c,-0x7c(%rbp)
jle    1982 <wsprEncode+0x812>
mov    $0x3c,%eax
mov    %eax,-0x2dc(%rbp)
jmp    19cf <wsprEncode+0x85f>
cmpl   $0x0,-0x7c(%rbp)
jge    1999 <wsprEncode+0x829>
xor    %eax,%eax
mov    %eax,-0x2e0(%rbp)
jmp    19c3 <wsprEncode+0x853>
mov    -0x7c(%rbp),%eax
mov    %eax,-0x2e4(%rbp)
mov    -0x7c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    -0x2e4(%rbp),%eax
movslq %edx,%rcx
add    -0xb0(%rbp,%rcx,4),%eax
mov    %eax,-0x2e0(%rbp)
mov    -0x2e0(%rbp),%eax
mov    %eax,-0x2dc(%rbp)
mov    -0x2dc(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x50(%rbp),%rax
shl    $0x7,%rax
mov    -0x7c(%rbp),%ecx
add    $0x40,%ecx
movslq %ecx,%rcx
add    -0x58(%rbp),%rcx
or     %rcx,%rax
mov    %rax,-0xb8(%rbp)
mov    -0x70(%rbp),%rax
shr    $0x14,%rax
mov    %al,-0xc3(%rbp)
mov    -0x70(%rbp),%rax
shr    $0xc,%rax
mov    %al,-0xc2(%rbp)
mov    -0x70(%rbp),%rax
shr    $0x4,%rax
mov    %al,-0xc1(%rbp)
mov    -0x70(%rbp),%rax
and    $0xf,%rax
shl    $0x4,%rax
mov    -0xb8(%rbp),%rcx
shr    $0x12,%rcx
and    $0xf,%rcx
or     %rcx,%rax
mov    %al,-0xc0(%rbp)
mov    -0xb8(%rbp),%rax
shr    $0xa,%rax
mov    %al,-0xbf(%rbp)
mov    -0xb8(%rbp),%rax
shr    $0x2,%rax
mov    %al,-0xbe(%rbp)
mov    -0xb8(%rbp),%rax
and    $0x3,%rax
shl    $0x6,%rax
mov    %al,-0xbd(%rbp)
movb   $0x0,-0xbc(%rbp)
movb   $0x0,-0xbb(%rbp)
movb   $0x0,-0xba(%rbp)
movb   $0x0,-0xb9(%rbp)
movl   $0x0,-0xc8(%rbp)
movq   $0x0,-0xd8(%rbp)
movl   $0x0,-0xcc(%rbp)
movslq -0xcc(%rbp),%rax
cmp    $0xb,%rax
je     1c09 <wsprEncode+0xa99>
movl   $0x7,-0x64(%rbp)
cmpl   $0x0,-0x64(%rbp)
jl     1bf0 <wsprEncode+0xa80>
mov    0x600(%rip),%rax
mov    %rax,-0x1a0(%rbp)
mov    0x5fa(%rip),%rax
mov    %rax,-0x198(%rbp)
mov    -0xd8(%rbp),%rax
shl    $0x1,%rax
movslq -0xcc(%rbp),%rcx
movsbl -0xc3(%rbp,%rcx,1),%edx
ff
mov    -0x64(%rbp),%ecx
sar    %cl,%edx
mov    %edx,%ecx
and    $0x1,%ecx
movslq %ecx,%rcx
or     %rcx,%rax
mov    %rax,-0xd8(%rbp)
movl   $0x0,-0xd0(%rbp)
cmpl   $0x2,-0xd0(%rbp)
je     1bdd <wsprEncode+0xa6d>
mov    -0xd8(%rbp),%rax
movslq -0xd0(%rbp),%rcx
and    -0x1a0(%rbp,%rcx,8),%rax
ff
mov    %rax,-0x1a8(%rbp)
movl   $0x0,-0x1ac(%rbp)
cmpq   $0x0,-0x1a8(%rbp)
je     1ba4 <wsprEncode+0xa34>
mov    $0x1,%eax
sub    -0x1ac(%rbp),%eax
mov    %eax,-0x1ac(%rbp)
mov    -0x1a8(%rbp),%rax
mov    -0x1a8(%rbp),%rcx
sub    $0x1,%rcx
and    %rcx,%rax
mov    %rax,-0x1a8(%rbp)
jmp    1b64 <wsprEncode+0x9f4>
mov    -0x1ac(%rbp),%eax
mov    %al,%cl
movslq -0xc8(%rbp),%rax
mov    %cl,-0x190(%rbp,%rax,1)
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
mov    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd0(%rbp)
jmp    1b30 <wsprEncode+0x9c0>
jmp    1be2 <wsprEncode+0xa72>
mov    -0x64(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x64(%rbp)
jmp    1acf <wsprEncode+0x95f>
jmp    1bf5 <wsprEncode+0xa85>
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    1ab7 <wsprEncode+0x947>
lea    -0x250(%rbp),%rdi
lea    0x419(%rip),%rsi
mov    $0xa2,%edx
call   1080 <memcpy@plt>
movl   $0x0,-0x64(%rbp)
cmpl   $0xa2,-0x64(%rbp)
je     1d12 <wsprEncode+0xba2>
movl   $0xffffffff,-0x7c(%rbp)
movl   $0x0,-0xc8(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x64(%rbp),%eax
je     1cd4 <wsprEncode+0xb64>
movl   $0x0,-0xcc(%rbp)
cmpl   $0x8,-0xcc(%rbp)
je     1ca0 <wsprEncode+0xb30>
mov    -0xc8(%rbp),%eax
mov    -0xcc(%rbp),%ecx
sar    %cl,%eax
and    $0x1,%eax
movzbl -0x251(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
mov    %al,-0x251(%rbp)
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    1c5c <wsprEncode+0xaec>
movzbl -0x251(%rbp),%eax
cmp    $0xa2,%eax
jge    1cbb <wsprEncode+0xb4b>
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    1cc0 <wsprEncode+0xb50>
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    1c46 <wsprEncode+0xad6>
movzbl -0x251(%rbp),%eax
movzbl -0x250(%rbp,%rax,1),%eax
ff
movslq -0x64(%rbp),%rcx
movzbl -0x190(%rbp,%rcx,1),%ecx
ff
shl    $0x1,%ecx
or     %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movzbl -0x251(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1c28 <wsprEncode+0xab8>
add    $0x2f0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wsprEncode>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xe8,%rsp
mov    %rcx,%r13
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rsi
lea    0x10(%rsp),%r12
mov    %r12,%rdi
mov    $0x10,%edx
call   1030 <strncpy@plt>
mov    %r12,%rdi
call   1060 <strlen@plt>
test   %eax,%eax
jle    11d1 <wsprEncode+0x71>
xor    %ebp,%ebp
lea    0x10(%rsp),%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl 0x10(%rsp,%rbp,1),%edi
call   1050 <toupper@plt>
mov    %al,0x10(%rsp,%rbp,1)
add    $0x1,%rbp
mov    %rbx,%rdi
call   1060 <strlen@plt>
cltq
cmp    %rax,%rbp
jl     11b0 <wsprEncode+0x50>
mov    %r12,%rdi
mov    $0x2f,%esi
call   1070 <strchr@plt>
test   %rax,%rax
mov    %r14,0x28(%rsp)
mov    %r15,0x20(%rsp)
je     1264 <wsprEncode+0x104>
mov    %rax,%rbx
lea    0x10(%rsp),%r12
sub    %r12,%rbx
mov    %r12,%rdi
call   1060 <strlen@plt>
mov    %ebx,%ecx
not    %ecx
add    %eax,%ecx
mov    %rbx,%rax
shl    $0x20,%rax
movslq %ebx,%rdx
movb   $0x0,0x10(%rsp,%rdx,1)
cmp    $0x2,%ecx
je     126c <wsprEncode+0x10c>
cmp    $0x1,%ecx
jne    12b4 <wsprEncode+0x154>
movabs $0x100000000,%rcx
add    %rcx,%rax
sar    $0x20,%rax
movsbl 0x10(%rsp,%rax,1),%eax
lea    -0x30(%rax),%ecx
lea    -0x30(%rax),%edx
lea    -0x37(%rax),%esi
cmp    $0x20,%eax
mov    $0x26,%ebx
cmovne %esi,%ebx
cmp    $0xa,%cl
cmovb  %edx,%ebx
add    $0x6a60,%ebx
mov    $0x2,%r15d
jmp    137a <wsprEncode+0x21a>
xor    %r15d,%r15d
jmp    137a <wsprEncode+0x21a>
movabs $0x100000000,%rcx
add    %rax,%rcx
sar    $0x20,%rcx
movsbq 0x10(%rsp,%rcx,1),%rcx
lea    (%rcx,%rcx,4),%rcx
movabs $0x200000000,%rdx
add    %rax,%rdx
sar    $0x20,%rdx
movsbq 0x10(%rsp,%rdx,1),%rax
lea    (%rax,%rcx,2),%rbx
add    $0xe86a,%rbx
mov    $0x2,%r15d
jmp    137a <wsprEncode+0x21a>
cmp    $0x3,%ecx
jl     12ea <wsprEncode+0x18a>
lea    (%rsp,%rdx,1),%r12
add    $0x10,%r12
movabs $0x100000000,%rax
cmp    $0x3,%edx
jge    12f5 <wsprEncode+0x195>
mov    $0x534,%ecx
cmp    $0x2,%ebx
je     1315 <wsprEncode+0x1b5>
mov    $0xc5b8,%ecx
test   %ebx,%ebx
jg     1338 <wsprEncode+0x1d8>
mov    $0x24,%eax
jmp    1352 <wsprEncode+0x1f2>
mov    $0x2,%r15d
jmp    137a <wsprEncode+0x21a>
lea    (%rax,%rbx,1),%ecx
add    $0xfffffffd,%ecx
movsbl 0x10(%rsp,%rcx,1),%ecx
lea    -0x30(%rcx),%edx
lea    -0x37(%rcx),%esi
add    $0xffffffd0,%ecx
cmp    $0xa,%dl
cmovae %esi,%ecx
lea    (%rcx,%rcx,8),%edx
lea    (%rcx,%rdx,4),%ecx
lea    (%rax,%rbx,1),%edx
add    $0xfffffffe,%edx
movsbl 0x10(%rsp,%rdx,1),%edx
lea    -0x30(%rdx),%esi
cmp    $0xa,%sil
lea    -0x30(%rcx,%rdx,1),%esi
lea    -0x37(%rcx,%rdx,1),%ecx
cmovb  %esi,%ecx
lea    (%rcx,%rcx,8),%edx
lea    (%rcx,%rdx,4),%ecx
add    %ebx,%eax
add    $0xffffffff,%eax
movsbl 0x10(%rsp,%rax,1),%eax
lea    -0x30(%rax),%edx
cmp    $0x9,%dl
ja     134f <wsprEncode+0x1ef>
add    $0xffffffd0,%eax
jmp    1352 <wsprEncode+0x1f2>
add    $0xffffffc9,%eax
add    %eax,%ecx
movslq %ecx,%rax
lea    -0x8000(%rax),%rbx
cmp    $0x8000,%eax
mov    $0x2,%r15d
sbb    $0x0,%r15
cmp    $0x8000,%eax
cmovb  %rax,%rbx
add    $0x1,%r12
movsbl 0x2(%r12),%edi
call   1040 <isdigit@plt>
mov    $0x2,%ebp
test   %rax,%rax
jne    13a3 <wsprEncode+0x243>
movsbl 0x1(%r12),%edi
call   1040 <isdigit@plt>
xor    %ebp,%ebp
test   %rax,%rax
setne  %bpl
mov    %r12,%rdi
call   1060 <strlen@plt>
mov    %ebp,%ecx
not    %ecx
add    %eax,%ecx
cmp    $0x2,%ebp
jae    13c6 <wsprEncode+0x266>
mov    $0x510,%eax
test   %ebp,%ebp
jne    13e5 <wsprEncode+0x285>
mov    $0x24,%edx
jmp    1400 <wsprEncode+0x2a0>
movsbq (%r12),%rax
lea    -0x30(%rax),%edx
lea    -0x37(%rax),%rsi
add    $0xffffffffffffffd0,%rax
cmp    $0xa,%dl
cmovae %rsi,%rax
shl    $0x2,%rax
lea    (%rax,%rax,8),%rax
lea    -0x1(%rbp),%edx
movsbq (%r12,%rdx,1),%rdx
lea    -0x30(%rdx),%esi
cmp    $0x9,%sil
ja     13fc <wsprEncode+0x29c>
add    $0xffffffffffffffd0,%rdx
jmp    1400 <wsprEncode+0x2a0>
add    $0xffffffffffffffc9,%rdx
add    %rdx,%rax
lea    (%rax,%rax,4),%rax
mov    %ebp,%edx
movsbq (%r12,%rdx,1),%rsi
lea    (%rsi,%rax,2),%rax
test   %ecx,%ecx
jle    1440 <wsprEncode+0x2e0>
lea    (%rax,%rax,8),%rax
lea    (%rax,%rax,2),%rax
movsbq 0x1(%rdx,%r12,1),%rsi
add    %rax,%rsi
lea    (%rsi,%rsi,8),%rax
cmp    $0x1,%ecx
jne    1538 <wsprEncode+0x3d8>
lea    (%rax,%rax,2),%rax
add    $0xffffffffffff7075,%rax
jmp    144d <wsprEncode+0x2ed>
imul   $0x2d9,%rax,%rax
add    $0xffffffffffff7a0e,%rax
add    $0x1a,%rax
mov    $0x1a,%r14d
lea    (%rax,%rax,8),%rax
lea    (%rax,%rax,2),%r12
test   %r15,%r15
jne    14f4 <wsprEncode+0x394>
lea    0x30(%rsp),%rbx
mov    %rbx,%rdi
mov    0x20(%rsp),%rsi
mov    $0x4,%edx
call   1030 <strncpy@plt>
mov    %rbx,%rdi
call   1060 <strlen@plt>
test   %eax,%eax
jle    14c1 <wsprEncode+0x361>
xor    %ebp,%ebp
lea    0x30(%rsp),%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl 0x30(%rsp,%rbp,1),%edi
call   1050 <toupper@plt>
mov    %al,0x30(%rsp,%rbp,1)
add    $0x1,%rbp
mov    %rbx,%rdi
call   1060 <strlen@plt>
cltq
cmp    %rax,%rbp
jl     14a0 <wsprEncode+0x340>
movsbl 0x30(%rsp),%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
movsbl 0x32(%rsp),%ecx
add    %eax,%ecx
neg    %ecx
imul   $0xb4,%ecx,%eax
movsbl 0x31(%rsp),%ecx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rcx,2),%eax
movsbl 0x33(%rsp),%ecx
add    %ecx,%eax
add    $0x265ea,%eax
movslq %eax,%rbx
add    %r14,%r12
mov    0x28(%rsp),%rdi
call   1080 <atoi@plt>
mov    $0x7c,%edx
cmp    $0x3c,%eax
jg     156e <wsprEncode+0x40e>
test   %eax,%eax
js     1569 <wsprEncode+0x409>
movzbl %al,%ecx
imul   $0xcd,%ecx,%edx
shr    $0xa,%edx
and    $0xfffffffe,%edx
lea    (%rdx,%rdx,4),%edx
sub    %dl,%cl
movzbl %cl,%ecx
lea    0xad3(%rip),%rdx
mov    (%rdx,%rcx,4),%ecx
lea    (%rax,%rcx,1),%edx
add    $0x40,%edx
jmp    156e <wsprEncode+0x40e>
lea    (%rax,%rax,2),%rax
movsbq 0x2(%rdx,%r12,1),%rsi
add    %rsi,%rax
add    $0xffffffffffff7034,%rax
mov    $0x1a,%r14d
cmp    $0x3,%ecx
jb     1457 <wsprEncode+0x2f7>
movsbq 0x3(%rdx,%r12,1),%r14
add    $0xffffffffffffffbf,%r14
jmp    1457 <wsprEncode+0x2f7>
mov    $0x40,%edx
shl    $0x7,%rbx
add    %r15,%rdx
or     %rdx,%rbx
mov    %r12,%rcx
shr    $0x14,%rcx
mov    %cl,0x5(%rsp)
mov    %r12,%rax
shr    $0xc,%rax
mov    %al,0x6(%rsp)
mov    %r12,%rax
shr    $0x4,%rax
mov    %al,0x7(%rsp)
shl    $0x4,%r12d
mov    %ebx,%eax
shr    $0x12,%eax
and    $0xf,%eax
or     %r12d,%eax
mov    %al,0x8(%rsp)
mov    %rbx,%rax
shr    $0xa,%rax
mov    %al,0x9(%rsp)
shr    $0x2,%rbx
mov    %bl,0xa(%rsp)
shl    $0x6,%dl
mov    %dl,0xb(%rsp)
movl   $0x0,0xc(%rsp)
xor    %r8d,%r8d
mov    $0xf2d05351,%r9d
mov    $0xe4613c47,%r10d
xor    %r14d,%r14d
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl %cl,%r11d
mov    $0x7,%ecx
jmp    160d <wsprEncode+0x4ad>
nopl   0x0(%rax,%rax,1)
mov    %al,0x31(%rsp,%rbp,1)
add    $0x2,%rbp
sub    $0x1,%ecx
jb     1680 <wsprEncode+0x520>
mov    %r11d,%eax
shr    %cl,%eax
and    $0x1,%eax
lea    (%rax,%r14,2),%r14
xor    %eax,%eax
mov    %r14,%rdi
mov    $0x0,%esi
and    %r9,%rdi
je     1642 <wsprEncode+0x4e2>
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
mov    $0x1,%esi
sub    %ebx,%esi
lea    -0x1(%rdi),%rdx
mov    %esi,%ebx
and    %rdx,%rdi
jne    1630 <wsprEncode+0x4d0>
movslq %ebp,%rbp
mov    %sil,0x30(%rsp,%rbp,1)
mov    %r14,%rdi
and    %r10,%rdi
je     1600 <wsprEncode+0x4a0>
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0x1,%eax
sub    %esi,%eax
lea    -0x1(%rdi),%rdx
mov    %eax,%esi
and    %rdx,%rdi
jne    1660 <wsprEncode+0x500>
jmp    1600 <wsprEncode+0x4a0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r8
cmp    $0xb,%r8
je     1694 <wsprEncode+0x534>
mov    0x5(%rsp,%r8,1),%cl
jmp    15f0 <wsprEncode+0x490>
xor    %eax,%eax
lea    0x993(%rip),%rdi
nopl   (%rax)
mov    $0xffffffff,%esi
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
mov    %edx,%ebx
rol    $0x4,%bl
mov    %ebx,%ecx
and    $0x33,%cl
shl    $0x2,%cl
shr    $0x2,%bl
and    $0x33,%bl
or     %cl,%bl
mov    %ebx,%ecx
and    $0x55,%cl
add    %cl,%cl
shr    %bl
and    $0x54,%bl
or     %cl,%bl
shr    %bl
cmp    $0x51,%bl
adc    $0x0,%esi
add    $0x1,%edx
cmp    %rsi,%rax
jne    16b0 <wsprEncode+0x550>
add    $0xff,%dl
rol    $0x4,%dl
mov    %edx,%ecx
and    $0x33,%cl
shl    $0x2,%cl
shr    $0x2,%dl
and    $0x33,%dl
or     %cl,%dl
mov    %edx,%ecx
and    $0x55,%cl
add    %cl,%cl
shr    %dl
and    $0x55,%dl
or     %cl,%dl
movzbl %dl,%ecx
mov    0x30(%rsp,%rax,1),%dl
add    %dl,%dl
or     (%rcx,%rdi,1),%dl
mov    %dl,0x0(%r13,%rcx,1)
add    $0x1,%rax
cmp    $0xa2,%rax
jne    16a0 <wsprEncode+0x540>
add    $0xe8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.wsprEncode.corr = [10 x i32] [i32 0, i32 -1, i32 1, i32 0, i32 -1, i32 2, i32 1, i32 0, i32 -1, i32 1]
@__const.wsprEncode.poly = [2 x i64] [i64 4073739089, i64 3831577671]
@__const.wsprEncode.npr3 = [162 x i8] c"\01\01\00\00\00\00\00\00\01\00\00\00\01\01\01\00\00\00\01\00\00\01\00\01\01\01\01\00\00\00\00\00\00\00\01\00\00\01\00\01\00\00\00\00\00\00\01\00\01\01\00\00\01\01\00\01\00\00\00\01\01\00\01\00\00\00\00\01\01\00\01\00\01\00\01\00\01\00\00\01\00\00\01\00\01\01\00\00\00\01\01\00\01\00\01\00\00\00\01\00\00\00\00\00\01\00\00\01\00\00\01\01\01\00\01\01\00\00\01\01\00\01\00\00\00\01\01\01\00\00\00\00\00\01\00\01\00\00\01\01\00\00\00\00\00\00\00\01\01\00\01\00\01\01\00\00\00\01\01\00\00\00"
define void @wsprEncode(i8* %0, i8* %1, i8* %2, i8* %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca [16 x i8]
%11 = alloca i32
%12 = alloca i64
%13 = alloca i64
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i64
%19 = alloca [4 x i8]
%20 = alloca i32
%21 = alloca i32
%22 = alloca [10 x i32]
%23 = alloca i64
%24 = alloca [11 x i8]
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i64
%29 = alloca [176 x i8]
%30 = alloca [2 x i64]
%31 = alloca i64
%32 = alloca i32
%33 = alloca [162 x i8]
%34 = alloca i8
store i8* %0, i8** %5
store i8* %1, i8** %6
store i8* %2, i8** %7
store i8* %3, i8** %8
%35 = getelementptr inbounds [16 x i8], [16 x i8]* %10, i64 0, i64 0
%36 = load i8*, i8** %5
%37 = call i32 @strncpy(i8* %35, i8* %36, i32 16)
%38 = getelementptr inbounds [16 x i8], [16 x i8]* %10, i64 0, i64 0
store i8* %38, i8** %9
store i32 0, i32* %11
br label %39
39: ; preds = %55, %4
%40 = load i32, i32* %11
%41 = load i8*, i8** %9
%42 = call i32 @strlen(i8* %41)
%43 = icmp slt i32 %40, %42
br i1 %43, label %44, label %58
44: ; preds = %39
%45 = load i8*, i8** %9
%46 = load i32, i32* %11
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 %47
%49 = load i8, i8* %48
%50 = call signext i8 @toupper(i8 signext %49)
%51 = load i8*, i8** %9
%52 = load i32, i32* %11
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %51, i64 %53
store i8 %50, i8* %54
br label %55
55: ; preds = %44
%56 = load i32, i32* %11
%57 = add nsw i32 %56, 1
store i32 %57, i32* %11
br label %39
58: ; preds = %39
store i64 0, i64* %13
%59 = load i8*, i8** %9
%60 = call i8* @strchr(i8* %59, i8 signext 47)
%61 = icmp ne i8* %60, null
br i1 %61, label %62, label %316
62: ; preds = %58
store i64 2, i64* %13
%63 = load i8*, i8** %9
%64 = call i8* @strchr(i8* %63, i8 signext 47)
%65 = load i8*, i8** %9
%66 = ptrtoint i8* %64 to i64
%67 = ptrtoint i8* %65 to i64
%68 = sub i64 %66, %67
%69 = trunc i64 %68 to i32
store i32 %69, i32* %14
%70 = load i8*, i8** %9
%71 = call i32 @strlen(i8* %70)
%72 = load i32, i32* %14
%73 = sub nsw i32 %71, %72
%74 = sub nsw i32 %73, 1
store i32 %74, i32* %15
%75 = load i8*, i8** %9
%76 = load i32, i32* %14
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds i8, i8* %75, i64 %77
store i8 0, i8* %78
%79 = load i32, i32* %15
%80 = icmp eq i32 %79, 1
br i1 %80, label %81, label %134
81: ; preds = %62
%82 = load i8*, i8** %9
%83 = load i32, i32* %14
%84 = add nsw i32 %83, 1
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %82, i64 %85
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = icmp sge i32 %88, 48
br i1 %89, label %90, label %108
90: ; preds = %81
%91 = load i8*, i8** %9
%92 = load i32, i32* %14
%93 = add nsw i32 %92, 1
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8, i8* %91, i64 %94
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = icmp sle i32 %97, 57
br i1 %98, label %99, label %108
99: ; preds = %90
%100 = load i8*, i8** %9
%101 = load i32, i32* %14
%102 = add nsw i32 %101, 1
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %100, i64 %103
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = sub nsw i32 %106, 48
br label %130
108: ; preds = %90, %81
%109 = load i8*, i8** %9
%110 = load i32, i32* %14
%111 = add nsw i32 %110, 1
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i8, i8* %109, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp eq i32 %115, 32
br i1 %116, label %117, label %118
117: ; preds = %108
br label %128
118: ; preds = %108
%119 = load i8*, i8** %9
%120 = load i32, i32* %14
%121 = add nsw i32 %120, 1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %119, i64 %122
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = sub nsw i32 %125, 65
%127 = add nsw i32 %126, 10
br label %128
128: ; preds = %118, %117
%129 = phi i32 [ 38, %117 ], [ %127, %118 ]
br label %130
130: ; preds = %128, %99
%131 = phi i32 [ %107, %99 ], [ %129, %128 ]
%132 = add nsw i32 27232, %131
%133 = sext i32 %132 to i64
store i64 %133, i64* %12
br label %134
134: ; preds = %130, %62
%135 = load i32, i32* %15
%136 = icmp eq i32 %135, 2
br i1 %136, label %137, label %158
137: ; preds = %134
%138 = load i8*, i8** %9
%139 = load i32, i32* %14
%140 = add nsw i32 %139, 1
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i8, i8* %138, i64 %141
%143 = load i8, i8* %142
%144 = sext i8 %143 to i32
%145 = sub nsw i32 %144, 48
%146 = mul nsw i32 10, %145
%147 = add nsw i32 60026, %146
%148 = load i8*, i8** %9
%149 = load i32, i32* %14
%150 = add nsw i32 %149, 2
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds i8, i8* %148, i64 %151
%153 = load i8, i8* %152
%154 = sext i8 %153 to i32
%155 = sub nsw i32 %154, 48
%156 = add nsw i32 %147, %155
%157 = sext i32 %156 to i64
store i64 %157, i64* %12
br label %158
158: ; preds = %137, %134
%159 = load i32, i32* %15
%160 = icmp sgt i32 %159, 2
br i1 %160, label %161, label %315
161: ; preds = %158
%162 = load i32, i32* %14
%163 = icmp slt i32 %162, 3
br i1 %163, label %164, label %165
164: ; preds = %161
br label %204
165: ; preds = %161
%166 = load i8*, i8** %9
%167 = load i32, i32* %14
%168 = sub nsw i32 %167, 3
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %166, i64 %169
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = icmp sge i32 %172, 48
br i1 %173, label %174, label %192
174: ; preds = %165
%175 = load i8*, i8** %9
%176 = load i32, i32* %14
%177 = sub nsw i32 %176, 3
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i8, i8* %175, i64 %178
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = icmp sle i32 %181, 57
br i1 %182, label %183, label %192
183: ; preds = %174
%184 = load i8*, i8** %9
%185 = load i32, i32* %14
%186 = sub nsw i32 %185, 3
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds i8, i8* %184, i64 %187
%189 = load i8, i8* %188
%190 = sext i8 %189 to i32
%191 = sub nsw i32 %190, 48
br label %202
192: ; preds = %174, %165
%193 = load i8*, i8** %9
%194 = load i32, i32* %14
%195 = sub nsw i32 %194, 3
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds i8, i8* %193, i64 %196
%198 = load i8, i8* %197
%199 = sext i8 %198 to i32
%200 = sub nsw i32 %199, 65
%201 = add nsw i32 %200, 10
br label %202
202: ; preds = %192, %183
%203 = phi i32 [ %191, %183 ], [ %201, %192 ]
br label %204
204: ; preds = %202, %164
%205 = phi i32 [ 36, %164 ], [ %203, %202 ]
%206 = sext i32 %205 to i64
store i64 %206, i64* %12
%207 = load i64, i64* %12
%208 = mul i64 37, %207
%209 = load i32, i32* %14
%210 = icmp slt i32 %209, 2
br i1 %210, label %211, label %212
211: ; preds = %204
br label %251
212: ; preds = %204
%213 = load i8*, i8** %9
%214 = load i32, i32* %14
%215 = sub nsw i32 %214, 2
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %213, i64 %216
%218 = load i8, i8* %217
%219 = sext i8 %218 to i32
%220 = icmp sge i32 %219, 48
br i1 %220, label %221, label %239
221: ; preds = %212
%222 = load i8*, i8** %9
%223 = load i32, i32* %14
%224 = sub nsw i32 %223, 2
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds i8, i8* %222, i64 %225
%227 = load i8, i8* %226
%228 = sext i8 %227 to i32
%229 = icmp sle i32 %228, 57
br i1 %229, label %230, label %239
230: ; preds = %221
%231 = load i8*, i8** %9
%232 = load i32, i32* %14
%233 = sub nsw i32 %232, 2
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i8, i8* %231, i64 %234
%236 = load i8, i8* %235
%237 = sext i8 %236 to i32
%238 = sub nsw i32 %237, 48
br label %249
239: ; preds = %221, %212
%240 = load i8*, i8** %9
%241 = load i32, i32* %14
%242 = sub nsw i32 %241, 2
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8, i8* %240, i64 %243
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = sub nsw i32 %246, 65
%248 = add nsw i32 %247, 10
br label %249
249: ; preds = %239, %230
%250 = phi i32 [ %238, %230 ], [ %248, %239 ]
br label %251
251: ; preds = %249, %211
%252 = phi i32 [ 36, %211 ], [ %250, %249 ]
%253 = sext i32 %252 to i64
%254 = add i64 %208, %253
store i64 %254, i64* %12
%255 = load i64, i64* %12
%256 = mul i64 37, %255
%257 = load i32, i32* %14
%258 = icmp slt i32 %257, 1
br i1 %258, label %259, label %260
259: ; preds = %251
br label %299
260: ; preds = %251
%261 = load i8*, i8** %9
%262 = load i32, i32* %14
%263 = sub nsw i32 %262, 1
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds i8, i8* %261, i64 %264
%266 = load i8, i8* %265
%267 = sext i8 %266 to i32
%268 = icmp sge i32 %267, 48
br i1 %268, label %269, label %287
269: ; preds = %260
%270 = load i8*, i8** %9
%271 = load i32, i32* %14
%272 = sub nsw i32 %271, 1
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds i8, i8* %270, i64 %273
%275 = load i8, i8* %274
%276 = sext i8 %275 to i32
%277 = icmp sle i32 %276, 57
br i1 %277, label %278, label %287
278: ; preds = %269
%279 = load i8*, i8** %9
%280 = load i32, i32* %14
%281 = sub nsw i32 %280, 1
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds i8, i8* %279, i64 %282
%284 = load i8, i8* %283
%285 = sext i8 %284 to i32
%286 = sub nsw i32 %285, 48
br label %297
287: ; preds = %269, %260
%288 = load i8*, i8** %9
%289 = load i32, i32* %14
%290 = sub nsw i32 %289, 1
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds i8, i8* %288, i64 %291
%293 = load i8, i8* %292
%294 = sext i8 %293 to i32
%295 = sub nsw i32 %294, 65
%296 = add nsw i32 %295, 10
br label %297
297: ; preds = %287, %278
%298 = phi i32 [ %286, %278 ], [ %296, %287 ]
br label %299
299: ; preds = %297, %259
%300 = phi i32 [ 36, %259 ], [ %298, %297 ]
%301 = sext i32 %300 to i64
%302 = add i64 %256, %301
store i64 %302, i64* %12
%303 = load i64, i64* %12
%304 = icmp ult i64 %303, 32768
br i1 %304, label %305, label %306
305: ; preds = %299
store i64 1, i64* %13
br label %309
306: ; preds = %299
%307 = load i64, i64* %12
%308 = sub i64 %307, 32768
store i64 %308, i64* %12
br label %309
309: ; preds = %306, %305
%310 = load i8*, i8** %9
%311 = load i32, i32* %14
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds i8, i8* %310, i64 %312
%314 = getelementptr inbounds i8, i8* %313, i64 1
store i8* %314, i8** %9
br label %315
315: ; preds = %309, %158
br label %316
316: ; preds = %315, %58
%317 = load i8*, i8** %9
%318 = getelementptr inbounds i8, i8* %317, i64 2
%319 = load i8, i8* %318
%320 = call i64 @isdigit(i8 signext %319)
%321 = icmp ne i64 %320, 0
br i1 %321, label %322, label %323
322: ; preds = %316
br label %331
323: ; preds = %316
%324 = load i8*, i8** %9
%325 = getelementptr inbounds i8, i8* %324, i64 1
%326 = load i8, i8* %325
%327 = call i64 @isdigit(i8 signext %326)
%328 = icmp ne i64 %327, 0
%329 = zext i1 %328 to i64
%330 = select i1 %328, i32 1, i32 0
br label %331
331: ; preds = %323, %322
%332 = phi i32 [ 2, %322 ], [ %330, %323 ]
store i32 %332, i32* %16
%333 = load i8*, i8** %9
%334 = call i32 @strlen(i8* %333)
%335 = load i32, i32* %16
%336 = sub nsw i32 %334, %335
%337 = sub nsw i32 %336, 1
store i32 %337, i32* %17
%338 = load i32, i32* %16
%339 = icmp slt i32 %338, 2
br i1 %339, label %340, label %341
340: ; preds = %331
br label %380
341: ; preds = %331
%342 = load i8*, i8** %9
%343 = load i32, i32* %16
%344 = sub nsw i32 %343, 2
%345 = sext i32 %344 to i64
%346 = getelementptr inbounds i8, i8* %342, i64 %345
%347 = load i8, i8* %346
%348 = sext i8 %347 to i32
%349 = icmp sge i32 %348, 48
br i1 %349, label %350, label %368
350: ; preds = %341
%351 = load i8*, i8** %9
%352 = load i32, i32* %16
%353 = sub nsw i32 %352, 2
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds i8, i8* %351, i64 %354
%356 = load i8, i8* %355
%357 = sext i8 %356 to i32
%358 = icmp sle i32 %357, 57
br i1 %358, label %359, label %368
359: ; preds = %350
%360 = load i8*, i8** %9
%361 = load i32, i32* %16
%362 = sub nsw i32 %361, 2
%363 = sext i32 %362 to i64
%364 = getelementptr inbounds i8, i8* %360, i64 %363
%365 = load i8, i8* %364
%366 = sext i8 %365 to i32
%367 = sub nsw i32 %366, 48
br label %378
368: ; preds = %350, %341
%369 = load i8*, i8** %9
%370 = load i32, i32* %16
%371 = sub nsw i32 %370, 2
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds i8, i8* %369, i64 %372
%374 = load i8, i8* %373
%375 = sext i8 %374 to i32
%376 = sub nsw i32 %375, 65
%377 = add nsw i32 %376, 10
br label %378
378: ; preds = %368, %359
%379 = phi i32 [ %367, %359 ], [ %377, %368 ]
br label %380
380: ; preds = %378, %340
%381 = phi i32 [ 36, %340 ], [ %379, %378 ]
%382 = sext i32 %381 to i64
store i64 %382, i64* %18
%383 = load i64, i64* %18
%384 = mul i64 36, %383
%385 = load i32, i32* %16
%386 = icmp slt i32 %385, 1
br i1 %386, label %387, label %388
387: ; preds = %380
br label %427
388: ; preds = %380
%389 = load i8*, i8** %9
%390 = load i32, i32* %16
%391 = sub nsw i32 %390, 1
%392 = sext i32 %391 to i64
%393 = getelementptr inbounds i8, i8* %389, i64 %392
%394 = load i8, i8* %393
%395 = sext i8 %394 to i32
%396 = icmp sge i32 %395, 48
br i1 %396, label %397, label %415
397: ; preds = %388
%398 = load i8*, i8** %9
%399 = load i32, i32* %16
%400 = sub nsw i32 %399, 1
%401 = sext i32 %400 to i64
%402 = getelementptr inbounds i8, i8* %398, i64 %401
%403 = load i8, i8* %402
%404 = sext i8 %403 to i32
%405 = icmp sle i32 %404, 57
br i1 %405, label %406, label %415
406: ; preds = %397
%407 = load i8*, i8** %9
%408 = load i32, i32* %16
%409 = sub nsw i32 %408, 1
%410 = sext i32 %409 to i64
%411 = getelementptr inbounds i8, i8* %407, i64 %410
%412 = load i8, i8* %411
%413 = sext i8 %412 to i32
%414 = sub nsw i32 %413, 48
br label %425
415: ; preds = %397, %388
%416 = load i8*, i8** %9
%417 = load i32, i32* %16
%418 = sub nsw i32 %417, 1
%419 = sext i32 %418 to i64
%420 = getelementptr inbounds i8, i8* %416, i64 %419
%421 = load i8, i8* %420
%422 = sext i8 %421 to i32
%423 = sub nsw i32 %422, 65
%424 = add nsw i32 %423, 10
br label %425
425: ; preds = %415, %406
%426 = phi i32 [ %414, %406 ], [ %424, %415 ]
br label %427
427: ; preds = %425, %387
%428 = phi i32 [ 36, %387 ], [ %426, %425 ]
%429 = sext i32 %428 to i64
%430 = add i64 %384, %429
store i64 %430, i64* %18
%431 = load i64, i64* %18
%432 = mul i64 10, %431
%433 = load i8*, i8** %9
%434 = load i32, i32* %16
%435 = sext i32 %434 to i64
%436 = getelementptr inbounds i8, i8* %433, i64 %435
%437 = load i8, i8* %436
%438 = sext i8 %437 to i64
%439 = add i64 %432, %438
%440 = sub i64 %439, 48
store i64 %440, i64* %18
%441 = load i64, i64* %18
%442 = mul i64 27, %441
%443 = load i32, i32* %17
%444 = icmp slt i32 %443, 1
br i1 %444, label %445, label %446
445: ; preds = %427
br label %455
446: ; preds = %427
%447 = load i8*, i8** %9
%448 = load i32, i32* %16
%449 = add nsw i32 %448, 1
%450 = sext i32 %449 to i64
%451 = getelementptr inbounds i8, i8* %447, i64 %450
%452 = load i8, i8* %451
%453 = sext i8 %452 to i32
%454 = sub nsw i32 %453, 65
br label %455
455: ; preds = %446, %445
%456 = phi i32 [ 26, %445 ], [ %454, %446 ]
%457 = sext i32 %456 to i64
%458 = add i64 %442, %457
store i64 %458, i64* %18
%459 = load i64, i64* %18
%460 = mul i64 27, %459
%461 = load i32, i32* %17
%462 = icmp slt i32 %461, 2
br i1 %462, label %463, label %464
463: ; preds = %455
br label %473
464: ; preds = %455
%465 = load i8*, i8** %9
%466 = load i32, i32* %16
%467 = add nsw i32 %466, 2
%468 = sext i32 %467 to i64
%469 = getelementptr inbounds i8, i8* %465, i64 %468
%470 = load i8, i8* %469
%471 = sext i8 %470 to i32
%472 = sub nsw i32 %471, 65
br label %473
473: ; preds = %464, %463
%474 = phi i32 [ 26, %463 ], [ %472, %464 ]
%475 = sext i32 %474 to i64
%476 = add i64 %460, %475
store i64 %476, i64* %18
%477 = load i64, i64* %18
%478 = mul i64 27, %477
%479 = load i32, i32* %17
%480 = icmp slt i32 %479, 3
br i1 %480, label %481, label %482
481: ; preds = %473
br label %491
482: ; preds = %473
%483 = load i8*, i8** %9
%484 = load i32, i32* %16
%485 = add nsw i32 %484, 3
%486 = sext i32 %485 to i64
%487 = getelementptr inbounds i8, i8* %483, i64 %486
%488 = load i8, i8* %487
%489 = sext i8 %488 to i32
%490 = sub nsw i32 %489, 65
br label %491
491: ; preds = %482, %481
%492 = phi i32 [ 26, %481 ], [ %490, %482 ]
%493 = sext i32 %492 to i64
%494 = add i64 %478, %493
store i64 %494, i64* %18
%495 = load i64, i64* %13
%496 = icmp ne i64 %495, 0
br i1 %496, label %543, label %497
497: ; preds = %491
%498 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 0
%499 = load i8*, i8** %6
%500 = call i32 @strncpy(i8* %498, i8* %499, i32 4)
store i32 0, i32* %20
br label %501
501: ; preds = %515, %497
%502 = load i32, i32* %20
%503 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 0
%504 = call i32 @strlen(i8* %503)
%505 = icmp slt i32 %502, %504
br i1 %505, label %506, label %518
506: ; preds = %501
%507 = load i32, i32* %20
%508 = sext i32 %507 to i64
%509 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 %508
%510 = load i8, i8* %509
%511 = call signext i8 @toupper(i8 signext %510)
%512 = load i32, i32* %20
%513 = sext i32 %512 to i64
%514 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 %513
store i8 %511, i8* %514
br label %515
515: ; preds = %506
%516 = load i32, i32* %20
%517 = add nsw i32 %516, 1
store i32 %517, i32* %20
br label %501
518: ; preds = %501
%519 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 0
%520 = load i8, i8* %519
%521 = sext i8 %520 to i32
%522 = sub nsw i32 %521, 65
%523 = mul nsw i32 10, %522
%524 = sub nsw i32 179, %523
%525 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 2
%526 = load i8, i8* %525
%527 = sext i8 %526 to i32
%528 = sub nsw i32 %527, 48
%529 = sub nsw i32 %524, %528
%530 = mul nsw i32 180, %529
%531 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 1
%532 = load i8, i8* %531
%533 = sext i8 %532 to i32
%534 = sub nsw i32 %533, 65
%535 = mul nsw i32 10, %534
%536 = add nsw i32 %530, %535
%537 = getelementptr inbounds [4 x i8], [4 x i8]* %19, i64 0, i64 3
%538 = load i8, i8* %537
%539 = sext i8 %538 to i32
%540 = sub nsw i32 %539, 48
%541 = add nsw i32 %536, %540
%542 = sext i32 %541 to i64
store i64 %542, i64* %12
br label %543
543: ; preds = %518, %491
%544 = load i8*, i8** %7
%545 = call i32 @atoi(i8* %544)
store i32 %545, i32* %21
%546 = bitcast [10 x i32]* %22 to i8*
%547 = load i32, i32* %21
%548 = icmp sgt i32 %547, 60
br i1 %548, label %549, label %550
549: ; preds = %543
br label %564
550: ; preds = %543
%551 = load i32, i32* %21
%552 = icmp slt i32 %551, 0
br i1 %552, label %553, label %554
553: ; preds = %550
br label %562
554: ; preds = %550
%555 = load i32, i32* %21
%556 = load i32, i32* %21
%557 = srem i32 %556, 10
%558 = sext i32 %557 to i64
%559 = getelementptr inbounds [10 x i32], [10 x i32]* %22, i64 0, i64 %558
%560 = load i32, i32* %559
%561 = add nsw i32 %555, %560
br label %562
562: ; preds = %554, %553
%563 = phi i32 [ 0, %553 ], [ %561, %554 ]
br label %564
564: ; preds = %562, %549
%565 = phi i32 [ 60, %549 ], [ %563, %562 ]
store i32 %565, i32* %21
%566 = load i64, i64* %12
%567 = shl i64 %566, 7
%568 = load i32, i32* %21
%569 = add nsw i32 %568, 64
%570 = sext i32 %569 to i64
%571 = load i64, i64* %13
%572 = add i64 %570, %571
%573 = or i64 %567, %572
store i64 %573, i64* %23
%574 = getelementptr inbounds [11 x i8], [11 x i8]* %24, i64 0, i64 0
%575 = load i64, i64* %18
%576 = lshr i64 %575, 20
%577 = trunc i64 %576 to i8
store i8 %577, i8* %574
%578 = getelementptr inbounds i8, i8* %574, i64 1
%579 = load i64, i64* %18
%580 = lshr i64 %579, 12
%581 = trunc i64 %580 to i8
store i8 %581, i8* %578
%582 = getelementptr inbounds i8, i8* %578, i64 1
%583 = load i64, i64* %18
%584 = lshr i64 %583, 4
%585 = trunc i64 %584 to i8
store i8 %585, i8* %582
%586 = getelementptr inbounds i8, i8* %582, i64 1
%587 = load i64, i64* %18
%588 = and i64 %587, 15
%589 = shl i64 %588, 4
%590 = load i64, i64* %23
%591 = lshr i64 %590, 18
%592 = and i64 %591, 15
%593 = or i64 %589, %592
%594 = trunc i64 %593 to i8
store i8 %594, i8* %586
%595 = getelementptr inbounds i8, i8* %586, i64 1
%596 = load i64, i64* %23
%597 = lshr i64 %596, 10
%598 = trunc i64 %597 to i8
store i8 %598, i8* %595
%599 = getelementptr inbounds i8, i8* %595, i64 1
%600 = load i64, i64* %23
%601 = lshr i64 %600, 2
%602 = trunc i64 %601 to i8
store i8 %602, i8* %599
%603 = getelementptr inbounds i8, i8* %599, i64 1
%604 = load i64, i64* %23
%605 = and i64 %604, 3
%606 = shl i64 %605, 6
%607 = trunc i64 %606 to i8
store i8 %607, i8* %603
%608 = getelementptr inbounds i8, i8* %603, i64 1
store i8 0, i8* %608
%609 = getelementptr inbounds i8, i8* %608, i64 1
store i8 0, i8* %609
%610 = getelementptr inbounds i8, i8* %609, i64 1
store i8 0, i8* %610
%611 = getelementptr inbounds i8, i8* %610, i64 1
store i8 0, i8* %611
store i32 0, i32* %25
store i64 0, i64* %28
store i32 0, i32* %26
br label %612
612: ; preds = %670, %564
%613 = load i32, i32* %26
%614 = sext i32 %613 to i64
%615 = icmp ne i64 %614, 11
br i1 %615, label %616, label %673
616: ; preds = %612
store i32 7, i32* %16
br label %617
617: ; preds = %666, %616
%618 = load i32, i32* %16
%619 = icmp sge i32 %618, 0
br i1 %619, label %620, label %669
620: ; preds = %617
%621 = bitcast [2 x i64]* %30 to i8*
%622 = load i64, i64* %28
%623 = shl i64 %622, 1
%624 = load i32, i32* %26
%625 = sext i32 %624 to i64
%626 = getelementptr inbounds [11 x i8], [11 x i8]* %24, i64 0, i64 %625
%627 = load i8, i8* %626
%628 = sext i8 %627 to i32
%629 = load i32, i32* %16
%630 = ashr i32 %628, %629
%631 = and i32 %630, 1
%632 = sext i32 %631 to i64
%633 = or i64 %623, %632
store i64 %633, i64* %28
store i32 0, i32* %27
br label %634
634: ; preds = %662, %620
%635 = load i32, i32* %27
%636 = icmp ne i32 %635, 2
br i1 %636, label %637, label %665
637: ; preds = %634
%638 = load i64, i64* %28
%639 = load i32, i32* %27
%640 = sext i32 %639 to i64
%641 = getelementptr inbounds [2 x i64], [2 x i64]* %30, i64 0, i64 %640
%642 = load i64, i64* %641
%643 = and i64 %638, %642
store i64 %643, i64* %31
store i32 0, i32* %32
br label %644
644: ; preds = %647, %637
%645 = load i64, i64* %31
%646 = icmp ne i64 %645, 0
br i1 %646, label %647, label %654
647: ; preds = %644
%648 = load i32, i32* %32
%649 = sub nsw i32 1, %648
store i32 %649, i32* %32
%650 = load i64, i64* %31
%651 = load i64, i64* %31
%652 = sub i64 %651, 1
%653 = and i64 %650, %652
store i64 %653, i64* %31
br label %644
654: ; preds = %644
%655 = load i32, i32* %32
%656 = trunc i32 %655 to i8
%657 = load i32, i32* %25
%658 = sext i32 %657 to i64
%659 = getelementptr inbounds [176 x i8], [176 x i8]* %29, i64 0, i64 %658
store i8 %656, i8* %659
%660 = load i32, i32* %25
%661 = add nsw i32 %660, 1
store i32 %661, i32* %25
br label %662
662: ; preds = %654
%663 = load i32, i32* %27
%664 = add nsw i32 %663, 1
store i32 %664, i32* %27
br label %634
665: ; preds = %634
br label %666
666: ; preds = %665
%667 = load i32, i32* %16
%668 = add nsw i32 %667, -1
store i32 %668, i32* %16
br label %617
669: ; preds = %617
br label %670
670: ; preds = %669
%671 = load i32, i32* %26
%672 = add nsw i32 %671, 1
store i32 %672, i32* %26
br label %612
673: ; preds = %612
%674 = bitcast [162 x i8]* %33 to i8*
store i32 0, i32* %16
br label %675
675: ; preds = %729, %673
%676 = load i32, i32* %16
%677 = icmp ne i32 %676, 162
br i1 %677, label %678, label %732
678: ; preds = %675
store i32 -1, i32* %21
store i32 0, i32* %25
br label %679
679: ; preds = %708, %678
%680 = load i32, i32* %21
%681 = load i32, i32* %16
%682 = icmp ne i32 %680, %681
br i1 %682, label %683, label %711
683: ; preds = %679
store i32 0, i32* %26
br label %684
684: ; preds = %697, %683
%685 = load i32, i32* %26
%686 = icmp ne i32 %685, 8
br i1 %686, label %687, label %700
687: ; preds = %684
%688 = load i32, i32* %25
%689 = load i32, i32* %26
%690 = ashr i32 %688, %689
%691 = and i32 %690, 1
%692 = load i8, i8* %34
%693 = zext i8 %692 to i32
%694 = shl i32 %693, 1
%695 = or i32 %691, %694
%696 = trunc i32 %695 to i8
store i8 %696, i8* %34
br label %697
697: ; preds = %687
%698 = load i32, i32* %26
%699 = add nsw i32 %698, 1
store i32 %699, i32* %26
br label %684
700: ; preds = %684
%701 = load i8, i8* %34
%702 = zext i8 %701 to i32
%703 = icmp slt i32 %702, 162
br i1 %703, label %704, label %707
704: ; preds = %700
%705 = load i32, i32* %21
%706 = add nsw i32 %705, 1
store i32 %706, i32* %21
br label %707
707: ; preds = %704, %700
br label %708
708: ; preds = %707
%709 = load i32, i32* %25
%710 = add nsw i32 %709, 1
store i32 %710, i32* %25
br label %679
711: ; preds = %679
%712 = load i8, i8* %34
%713 = zext i8 %712 to i64
%714 = getelementptr inbounds [162 x i8], [162 x i8]* %33, i64 0, i64 %713
%715 = load i8, i8* %714
%716 = zext i8 %715 to i32
%717 = load i32, i32* %16
%718 = sext i32 %717 to i64
%719 = getelementptr inbounds [176 x i8], [176 x i8]* %29, i64 0, i64 %718
%720 = load i8, i8* %719
%721 = zext i8 %720 to i32
%722 = shl i32 %721, 1
%723 = or i32 %716, %722
%724 = trunc i32 %723 to i8
%725 = load i8*, i8** %8
%726 = load i8, i8* %34
%727 = zext i8 %726 to i64
%728 = getelementptr inbounds i8, i8* %725, i64 %727
store i8 %724, i8* %728
br label %729
729: ; preds = %711
%730 = load i32, i32* %16
%731 = add nsw i32 %730, 1
store i32 %731, i32* %16
br label %675
732: ; preds = %675
ret void
}

LLVM IR (-O2):
@__const.wsprEncode.corr = [10 x i32] [i32 0, i32 -1, i32 1, i32 0, i32 -1, i32 2, i32 1, i32 0, i32 -1, i32 1]
@__const.wsprEncode.npr3 = [162 x i8] c"\01\01\00\00\00\00\00\00\01\00\00\00\01\01\01\00\00\00\01\00\00\01\00\01\01\01\01\00\00\00\00\00\00\00\01\00\00\01\00\01\00\00\00\00\00\00\01\00\01\01\00\00\01\01\00\01\00\00\00\01\01\00\01\00\00\00\00\01\01\00\01\00\01\00\01\00\01\00\00\01\00\00\01\00\01\01\00\00\00\01\01\00\01\00\01\00\00\00\01\00\00\00\00\00\01\00\00\01\00\00\01\01\01\00\01\01\00\00\01\01\00\01\00\00\00\01\01\01\00\00\00\00\00\01\00\01\00\00\01\01\00\00\00\00\00\00\00\01\01\00\01\00\01\01\00\00\00\01\01\00\00\00"
define void @wsprEncode(i8* %0, i8* %1, i8* nocapture %2, i8* nocapture writeonly %3) {
%5 = alloca [16 x i8]
%6 = alloca [4 x i8]
%7 = alloca [11 x i8]
%8 = alloca [176 x i8]
%9 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 0
%10 = call i32 @strncpy(i8* %9, i8* %0, i32 16)
%11 = call i32 @strlen(i8* %9)
%12 = icmp sgt i32 %11, 0
br i1 %12, label %16, label %13
13: ; preds = %16, %4
%14 = call i8* @strchr(i8* %9, i8 signext 47)
%15 = icmp eq i8* %14, null
br i1 %15, label %120, label %25
16: ; preds = %4, %16
%17 = phi i64 [ %21, %16 ], [ 0, %4 ]
%18 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %17
%19 = load i8, i8* %18
%20 = call signext i8 @toupper(i8 signext %19)
store i8 %20, i8* %18
%21 = add nuw nsw i64 %17, 1
%22 = call i32 @strlen(i8* %9)
%23 = sext i32 %22 to i64
%24 = icmp slt i64 %21, %23
br i1 %24, label %16, label %13
25: ; preds = %13
%26 = ptrtoint i8* %14 to i64
%27 = ptrtoint [16 x i8]* %5 to i64
%28 = sub i64 %26, %27
%29 = trunc i64 %28 to i32
%30 = call i32 @strlen(i8* %9)
%31 = xor i32 %29, -1
%32 = add i32 %30, %31
%33 = shl i64 %28, 32
%34 = ashr exact i64 %33, 32
%35 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %34
store i8 0, i8* %35
switch i32 %32, label %65 [
i32 1, label %36
i32 2, label %51
]
36: ; preds = %25
%37 = add i64 %33, 4294967296
%38 = ashr exact i64 %37, 32
%39 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %38
%40 = load i8, i8* %39
%41 = sext i8 %40 to i64
%42 = add i8 %40, -48
%43 = icmp ult i8 %42, 10
%44 = add nsw i64 %41, 4294967248
%45 = icmp eq i8 %40, 32
%46 = add nsw i64 %41, 4294967241
%47 = select i1 %45, i64 38, i64 %46
%48 = select i1 %43, i64 %44, i64 %47
%49 = add nuw nsw i64 %48, 27232
%50 = and i64 %49, 4294967295
br label %120
51: ; preds = %25
%52 = add i64 %33, 4294967296
%53 = ashr exact i64 %52, 32
%54 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %53
%55 = load i8, i8* %54
%56 = sext i8 %55 to i64
%57 = mul nsw i64 %56, 10
%58 = add i64 %33, 8589934592
%59 = ashr exact i64 %58, 32
%60 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %59
%61 = load i8, i8* %60
%62 = sext i8 %61 to i64
%63 = add nsw i64 %62, 59498
%64 = add nsw i64 %63, %57
br label %120
65: ; preds = %25
%66 = icmp sgt i32 %32, 2
br i1 %66, label %67, label %120
67: ; preds = %65
%68 = icmp slt i32 %29, 3
br i1 %68, label %80, label %69
69: ; preds = %67
%70 = add i64 %28, 4294967293
%71 = and i64 %70, 4294967295
%72 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %71
%73 = load i8, i8* %72
%74 = sext i8 %73 to i32
%75 = add i8 %73, -48
%76 = icmp ult i8 %75, 10
%77 = select i1 %76, i32 -48, i32 -55
%78 = add nsw i32 %77, %74
%79 = mul nsw i32 %78, 37
br label %82
80: ; preds = %67
%81 = icmp eq i32 %29, 2
br i1 %81, label %82, label %95
82: ; preds = %69, %80
%83 = phi i32 [ %79, %69 ], [ 1332, %80 ]
%84 = add i64 %28, 4294967294
%85 = and i64 %84, 4294967295
%86 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %85
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = add i8 %87, -48
%90 = icmp ult i8 %89, 10
%91 = select i1 %90, i32 -48, i32 -55
%92 = add nsw i32 %83, %88
%93 = add nsw i32 %92, %91
%94 = mul nsw i32 %93, 37
br label %97
95: ; preds = %80
%96 = icmp slt i32 %29, 1
br i1 %96, label %110, label %97
97: ; preds = %82, %95
%98 = phi i32 [ %94, %82 ], [ 50616, %95 ]
%99 = add i64 %28, 4294967295
%100 = and i64 %99, 4294967295
%101 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %100
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = add i8 %102, -48
%105 = icmp ult i8 %104, 10
br i1 %105, label %106, label %108
106: ; preds = %97
%107 = add nsw i32 %103, -48
br label %110
108: ; preds = %97
%109 = add nsw i32 %103, -55
br label %110
110: ; preds = %106, %108, %95
%111 = phi i32 [ 50616, %95 ], [ %98, %106 ], [ %98, %108 ]
%112 = phi i32 [ 36, %95 ], [ %107, %106 ], [ %109, %108 ]
%113 = add nsw i32 %112, %111
%114 = sext i32 %113 to i64
%115 = icmp ult i32 %113, 32768
%116 = add nsw i64 %114, -32768
%117 = select i1 %115, i64 1, i64 2
%118 = select i1 %115, i64 %114, i64 %116
%119 = getelementptr inbounds i8, i8* %35, i64 1
br label %120
120: ; preds = %51, %36, %65, %110, %13
%121 = phi i64 [ 0, %13 ], [ %117, %110 ], [ 2, %65 ], [ 2, %36 ], [ 2, %51 ]
%122 = phi i64 [ undef, %13 ], [ %118, %110 ], [ undef, %65 ], [ %50, %36 ], [ %64, %51 ]
%123 = phi i8* [ %9, %13 ], [ %119, %110 ], [ %9, %65 ], [ %9, %36 ], [ %9, %51 ]
%124 = getelementptr inbounds i8, i8* %123, i64 2
%125 = load i8, i8* %124
%126 = call i64 @isdigit(i8 signext %125)
%127 = icmp eq i64 %126, 0
br i1 %127, label %128, label %134
128: ; preds = %120
%129 = getelementptr inbounds i8, i8* %123, i64 1
%130 = load i8, i8* %129
%131 = call i64 @isdigit(i8 signext %130)
%132 = icmp ne i64 %131, 0
%133 = zext i1 %132 to i32
br label %134
134: ; preds = %120, %128
%135 = phi i32 [ %133, %128 ], [ 2, %120 ]
%136 = call i32 @strlen(i8* %123)
%137 = xor i32 %135, -1
%138 = add i32 %136, %137
%139 = icmp ult i32 %135, 2
br i1 %139, label %148, label %140
140: ; preds = %134
%141 = load i8, i8* %123
%142 = sext i8 %141 to i64
%143 = add i8 %141, -48
%144 = icmp ult i8 %143, 10
%145 = select i1 %144, i64 -48, i64 -55
%146 = add nsw i64 %145, %142
%147 = mul nsw i64 %146, 36
br label %150
148: ; preds = %134
%149 = icmp eq i32 %135, 0
br i1 %149, label %163, label %150
150: ; preds = %140, %148
%151 = phi i64 [ %147, %140 ], [ 1296, %148 ]
%152 = add nsw i32 %135, -1
%153 = zext i32 %152 to i64
%154 = getelementptr inbounds i8, i8* %123, i64 %153
%155 = load i8, i8* %154
%156 = sext i8 %155 to i64
%157 = add i8 %155, -48
%158 = icmp ult i8 %157, 10
br i1 %158, label %159, label %161
159: ; preds = %150
%160 = add nsw i64 %156, -48
br label %163
161: ; preds = %150
%162 = add nsw i64 %156, -55
br label %163
163: ; preds = %159, %161, %148
%164 = phi i64 [ 1296, %148 ], [ %151, %159 ], [ %151, %161 ]
%165 = phi i64 [ 36, %148 ], [ %160, %159 ], [ %162, %161 ]
%166 = add nsw i64 %165, %164
%167 = mul nsw i64 %166, 10
%168 = zext i32 %135 to i64
%169 = getelementptr inbounds i8, i8* %123, i64 %168
%170 = load i8, i8* %169
%171 = sext i8 %170 to i64
%172 = add nsw i64 %167, %171
%173 = icmp slt i32 %138, 1
br i1 %173, label %174, label %177
174: ; preds = %163
%175 = mul nsw i64 %172, 729
%176 = add nsw i64 %175, -34290
br label %188
177: ; preds = %163
%178 = mul nsw i64 %172, 27
%179 = add nuw nsw i32 %135, 1
%180 = zext i32 %179 to i64
%181 = getelementptr inbounds i8, i8* %123, i64 %180
%182 = load i8, i8* %181
%183 = sext i8 %182 to i64
%184 = add nsw i64 %178, %183
%185 = mul nsw i64 %184, 27
%186 = add nsw i64 %185, -36747
%187 = icmp eq i32 %138, 1
br i1 %187, label %188, label %191
188: ; preds = %174, %177
%189 = phi i64 [ %176, %174 ], [ %186, %177 ]
%190 = add nsw i64 %189, 26
br label %207
191: ; preds = %177
%192 = add nuw nsw i32 %135, 2
%193 = zext i32 %192 to i64
%194 = getelementptr inbounds i8, i8* %123, i64 %193
%195 = load i8, i8* %194
%196 = sext i8 %195 to i64
%197 = add nsw i64 %185, -36812
%198 = add nsw i64 %197, %196
%199 = icmp ult i32 %138, 3
br i1 %199, label %207, label %200
200: ; preds = %191
%201 = add nuw nsw i32 %135, 3
%202 = zext i32 %201 to i64
%203 = getelementptr inbounds i8, i8* %123, i64 %202
%204 = load i8, i8* %203
%205 = sext i8 %204 to i64
%206 = add nsw i64 %205, -65
br label %207
207: ; preds = %188, %191, %200
%208 = phi i64 [ %198, %200 ], [ %198, %191 ], [ %190, %188 ]
%209 = phi i64 [ %206, %200 ], [ 26, %191 ], [ 26, %188 ]
%210 = mul nsw i64 %208, 27
%211 = add nsw i64 %210, %209
%212 = icmp eq i64 %121, 0
br i1 %212, label %213, label %248
213: ; preds = %207
%214 = getelementptr inbounds [4 x i8], [4 x i8]* %6, i64 0, i64 0
%215 = call i32 @strncpy(i8* %214, i8* %1, i32 4)
%216 = call i32 @strlen(i8* %214)
%217 = icmp sgt i32 %216, 0
br i1 %217, label %239, label %218
218: ; preds = %239, %213
%219 = load i8, i8* %214
%220 = sext i8 %219 to i64
%221 = mul nsw i64 %220, -10
%222 = getelementptr inbounds [4 x i8], [4 x i8]* %6, i64 0, i64 2
%223 = load i8, i8* %222
%224 = sext i8 %223 to i64
%225 = sub nsw i64 %221, %224
%226 = mul nsw i64 %225, 180
%227 = getelementptr inbounds [4 x i8], [4 x i8]* %6, i64 0, i64 1
%228 = load i8, i8* %227
%229 = sext i8 %228 to i64
%230 = mul nsw i64 %229, 10
%231 = add nsw i64 %226, %230
%232 = getelementptr inbounds [4 x i8], [4 x i8]* %6, i64 0, i64 3
%233 = load i8, i8* %232
%234 = sext i8 %233 to i64
%235 = add nsw i64 %231, %234
%236 = shl nsw i64 %235, 32
%237 = add i64 %236, 675005650173952
%238 = ashr exact i64 %237, 32
br label %248
239: ; preds = %213, %239
%240 = phi i64 [ %244, %239 ], [ 0, %213 ]
%241 = getelementptr inbounds [4 x i8], [4 x i8]* %6, i64 0, i64 %240
%242 = load i8, i8* %241
%243 = call signext i8 @toupper(i8 signext %242)
store i8 %243, i8* %241
%244 = add nuw nsw i64 %240, 1
%245 = call i32 @strlen(i8* %214)
%246 = sext i32 %245 to i64
%247 = icmp slt i64 %244, %246
br i1 %247, label %239, label %218
248: ; preds = %218, %207
%249 = phi i64 [ %122, %207 ], [ %238, %218 ]
%250 = call i32 @atoi(i8* %2)
%251 = icmp sgt i32 %250, 60
br i1 %251, label %263, label %252
252: ; preds = %248
%253 = icmp slt i32 %250, 0
br i1 %253, label %263, label %254
254: ; preds = %252
%255 = trunc i32 %250 to i8
%256 = urem i8 %255, 10
%257 = zext i8 %256 to i64
%258 = getelementptr inbounds [10 x i32], [10 x i32]* @__const.wsprEncode.corr, i64 0, i64 %257
%259 = load i32, i32* %258
%260 = add nuw nsw i32 %250, 64
%261 = add i32 %260, %259
%262 = zext i32 %261 to i64
br label %263
263: ; preds = %254, %252, %248
%264 = phi i64 [ 124, %248 ], [ %262, %254 ], [ 64, %252 ]
%265 = shl nsw i64 %249, 7
%266 = add nuw nsw i64 %264, %121
%267 = or i64 %266, %265
%268 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 0
%269 = lshr i64 %211, 20
%270 = trunc i64 %269 to i8
store i8 %270, i8* %268
%271 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 1
%272 = lshr i64 %211, 12
%273 = trunc i64 %272 to i8
store i8 %273, i8* %271
%274 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 2
%275 = lshr i64 %211, 4
%276 = trunc i64 %275 to i8
store i8 %276, i8* %274
%277 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 3
%278 = shl i64 %211, 4
%279 = lshr i64 %267, 18
%280 = and i64 %279, 15
%281 = or i64 %280, %278
%282 = trunc i64 %281 to i8
store i8 %282, i8* %277
%283 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 4
%284 = lshr i64 %267, 10
%285 = trunc i64 %284 to i8
store i8 %285, i8* %283
%286 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 5
%287 = lshr i64 %267, 2
%288 = trunc i64 %287 to i8
store i8 %288, i8* %286
%289 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 6
%290 = trunc i64 %266 to i8
%291 = shl i8 %290, 6
store i8 %291, i8* %289
%292 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 7
%293 = getelementptr inbounds [176 x i8], [176 x i8]* %8, i64 0, i64 0
%294 = bitcast i8* %292 to i32*
store i32 0, i32* %294
br label %295
295: ; preds = %345, %263
%296 = phi i8 [ %270, %263 ], [ %347, %345 ]
%297 = phi i64 [ 0, %263 ], [ %343, %345 ]
%298 = phi i64 [ 0, %263 ], [ %309, %345 ]
%299 = phi i64 [ 0, %263 ], [ %339, %345 ]
%300 = sext i8 %296 to i32
br label %301
301: ; preds = %295, %335
%302 = phi i64 [ %298, %295 ], [ %309, %335 ]
%303 = phi i64 [ %299, %295 ], [ %339, %335 ]
%304 = phi i32 [ 7, %295 ], [ %340, %335 ]
%305 = shl i64 %302, 1
%306 = lshr i32 %300, %304
%307 = and i32 %306, 1
%308 = zext i32 %307 to i64
%309 = or i64 %305, %308
%310 = shl i64 %303, 32
%311 = ashr exact i64 %310, 32
%312 = and i64 %309, 4073739089
%313 = icmp eq i64 %312, 0
br i1 %313, label %321, label %314
314: ; preds = %301, %314
%315 = phi i32 [ %317, %314 ], [ 0, %301 ]
%316 = phi i64 [ %319, %314 ], [ %312, %301 ]
%317 = sub nsw i32 1, %315
%318 = add i64 %316, -1
%319 = and i64 %318, %316
%320 = icmp eq i64 %319, 0
br i1 %320, label %321, label %314
321: ; preds = %314, %301
%322 = phi i32 [ 0, %301 ], [ %317, %314 ]
%323 = trunc i32 %322 to i8
%324 = getelementptr inbounds [176 x i8], [176 x i8]* %8, i64 0, i64 %311
store i8 %323, i8* %324
%325 = add nsw i64 %311, 1
%326 = and i64 %309, 3831577671
%327 = icmp eq i64 %326, 0
br i1 %327, label %335, label %328
328: ; preds = %321, %328
%329 = phi i32 [ %331, %328 ], [ 0, %321 ]
%330 = phi i64 [ %333, %328 ], [ %326, %321 ]
%331 = sub nsw i32 1, %329
%332 = add i64 %330, -1
%333 = and i64 %332, %330
%334 = icmp eq i64 %333, 0
br i1 %334, label %335, label %328
335: ; preds = %328, %321
%336 = phi i32 [ 0, %321 ], [ %331, %328 ]
%337 = trunc i32 %336 to i8
%338 = getelementptr inbounds [176 x i8], [176 x i8]* %8, i64 0, i64 %325
store i8 %337, i8* %338
%339 = add nsw i64 %311, 2
%340 = add nsw i32 %304, -1
%341 = icmp eq i32 %304, 0
br i1 %341, label %342, label %301
342: ; preds = %335
%343 = add nuw nsw i64 %297, 1
%344 = icmp eq i64 %343, 11
br i1 %344, label %348, label %345
345: ; preds = %342
%346 = getelementptr inbounds [11 x i8], [11 x i8]* %7, i64 0, i64 %343
%347 = load i8, i8* %346
br label %295
348: ; preds = %342, %361
%349 = phi i64 [ %372, %361 ], [ 0, %342 ]
br label %350
350: ; preds = %348, %350
%351 = phi i32 [ 0, %348 ], [ %358, %350 ]
%352 = phi i32 [ -1, %348 ], [ %357, %350 ]
%353 = trunc i32 %351 to i7
%354 = call i7 @llvm.bitreverse.i7(i7 %353)
%355 = icmp ult i7 %354, -47
%356 = zext i1 %355 to i32
%357 = add nsw i32 %352, %356
%358 = add nuw nsw i32 %351, 1
%359 = zext i32 %357 to i64
%360 = icmp eq i64 %349, %359
br i1 %360, label %361, label %350
361: ; preds = %350
%362 = trunc i32 %351 to i8
%363 = call i8 @llvm.bitreverse.i8(i8 %362)
%364 = zext i8 %363 to i64
%365 = getelementptr inbounds [162 x i8], [162 x i8]* @__const.wsprEncode.npr3, i64 0, i64 %364
%366 = load i8, i8* %365
%367 = getelementptr inbounds [176 x i8], [176 x i8]* %8, i64 0, i64 %349
%368 = load i8, i8* %367
%369 = shl i8 %368, 1
%370 = or i8 %369, %366
%371 = getelementptr inbounds i8, i8* %3, i64 %364
store i8 %370, i8* %371
%372 = add nuw nsw i64 %349, 1
%373 = icmp eq i64 %372, 162
br i1 %373, label %374, label %348
374: ; preds = %361
ret void
}