#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 */

/* Variables and functions */
int relativeUrl(char *, char *);
int /*<<< orphan*/ removeWhiteSpace(char *);
char *strchr(char *, char);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
int /*<<< orphan*/ strncat(char *, char *, int);
int /*<<< orphan*/ strncmp(char *, char *, int);
int /*<<< orphan*/ strncpy(char *, char *, int);
char *strpbrk(char *, char *);
int GetNextURL(char *html, char *urlofthispage, char *result, int pos) {
  char c;
  int len, i, j;
  char *p1;
  char *p2;
  if (pos == 0) {
    removeWhiteSpace(html);
  }
  while (0 != (c = html[pos])) {
    if ((c == '<') && ((html[pos + 1] == 'a') || (html[pos + 1] == 'A'))) {
      break;
    }
    pos++;
  }
  if (c) {
    p1 = strchr(&(html[pos + 1]), '=');
    if ((!p1) || (*(p1 - 1) == 'e') || ((p1 - html - pos) > 10)) {
      return GetNextURL(html, urlofthispage, result, pos + 1);
    }
    if (*(p1 + 1) == '\"' || *(p1 + 1) == '\'')
      p1++;
    p1++;
    p2 = strpbrk(p1, "\'\">");
    if (!p2) {
      return GetNextURL(html, urlofthispage, result, pos + 1);
    }
    if (*p1 == '#') {
      return GetNextURL(html, urlofthispage, result, pos + 1);
    }
    if (!strncmp(p1, "mailto:", 7))
      return GetNextURL(html, urlofthispage, result, pos + 1);
    if (!strncmp(p1, "http", 4) || !strncmp(p1, "HTTP", 4)) {
      strncpy(result, p1, (p2 - p1));
      return (int)(p2 - html + 1);
    } else {
      if (p1[0] == '.') {
        pos = pos + (int)(p2 - p1);
        strncpy(result, p1, (p2 - p1));
        int len = 0;
        if ((len = relativeUrl(urlofthispage, result)) > 0) {
          return len;
        } else {
          return GetNextURL(html, urlofthispage, result, pos + 1);
        }
      }
      if (p1[0] == '/') {
        for (i = 7; i < strlen(urlofthispage); i++)
          if (urlofthispage[i] == '/')
            break;
        strcpy(result, urlofthispage);
        result[i] = 0;
        strncat(result, p1, (p2 - p1));
        return (int)(p2 - html + 1);
      } else {
        len = strlen(urlofthispage);
        for (i = (len - 1); i >= 0; i--)
          if (urlofthispage[i] == '/')
            break;
        for (j = (len - 1); j >= 0; j--)
          if (urlofthispage[j] == '.')
            break;
        if (i == (len - 1)) {
          strcpy(result, urlofthispage);
          result[i + 1] = 0;
          strncat(result, p1, p2 - p1);
          return (int)(p2 - html + 1);
        }
        if ((i <= 6) || (i > j)) {
          strcpy(result, urlofthispage);
          result[len] = '/';
          strncat(result, p1, p2 - p1);
          return (int)(p2 - html + 1);
        }
        strcpy(result, urlofthispage);
        result[i + 1] = 0;
        strncat(result, p1, p2 - p1);
        return (int)(p2 - html + 1);
      }
    }
  }
  return -1;
}


x86 assembly (clang, -O0):
<GetNextURL>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    11ca <GetNextURL+0x2a>
mov    -0x10(%rbp),%rdi
call   1040 <removeWhiteSpace@plt>
jmp    11cf <GetNextURL+0x2f>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x25(%rbp)
movsbl %al,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
je     123e <GetNextURL+0x9e>
movsbl -0x25(%rbp),%eax
cmp    $0x3c,%eax
jne    1230 <GetNextURL+0x90>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
je     122b <GetNextURL+0x8b>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jne    1230 <GetNextURL+0x90>
jmp    123e <GetNextURL+0x9e>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11cf <GetNextURL+0x2f>
cmpb   $0x0,-0x25(%rbp)
je     16d9 <GetNextURL+0x539>
mov    -0x10(%rbp),%rdi
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
add    %rax,%rdi
mov    $0x3d,%esi
call   1080 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     129d <GetNextURL+0xfd>
mov    -0x40(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x65,%eax
je     129d <GetNextURL+0xfd>
mov    -0x40(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
movslq -0x24(%rbp),%rcx
sub    %rcx,%rax
cmp    $0xa,%rax
jle    12bc <GetNextURL+0x11c>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
call   10a0 <GetNextURL@plt>
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x22,%eax
je     12de <GetNextURL+0x13e>
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x27,%eax
jne    12ea <GetNextURL+0x14a>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
lea    0xcff(%rip),%rsi
call   10b0 <strpbrk@plt>
mov    %rax,-0x48(%rbp)
cmpq   $0x0,-0x48(%rbp)
jne    1334 <GetNextURL+0x194>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
call   10a0 <GetNextURL@plt>
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    1363 <GetNextURL+0x1c3>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
call   10a0 <GetNextURL@plt>
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x40(%rbp),%rdi
lea    0xc96(%rip),%rsi
mov    $0x7,%edx
call   1050 <strncmp@plt>
cmp    $0x0,%eax
jne    13a0 <GetNextURL+0x200>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
call   10a0 <GetNextURL@plt>
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x40(%rbp),%rdi
lea    0xc61(%rip),%rsi
mov    $0x4,%edx
call   1050 <strncmp@plt>
cmp    $0x0,%eax
je     13dc <GetNextURL+0x23c>
mov    -0x40(%rbp),%rdi
lea    0xc48(%rip),%rsi
mov    $0x4,%edx
call   1050 <strncmp@plt>
cmp    $0x0,%eax
jne    140d <GetNextURL+0x26d>
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1030 <strncpy@plt>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1494 <GetNextURL+0x2f4>
mov    -0x24(%rbp),%eax
mov    -0x48(%rbp),%rcx
mov    -0x40(%rbp),%rdx
sub    %rdx,%rcx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1030 <strncpy@plt>
movl   $0x0,-0x4c(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   10c0 <relativeUrl@plt>
mov    %eax,-0x4c(%rbp)
cmp    $0x0,%eax
jle    1475 <GetNextURL+0x2d5>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
call   10a0 <GetNextURL@plt>
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    153e <GetNextURL+0x39e>
movl   $0x7,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x18(%rbp),%rdi
call   1070 <strlen@plt>
mov    %eax,%ecx
mov    -0x50(%rbp),%eax
cmp    %ecx,%eax
jge    14f4 <GetNextURL+0x354>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    14e1 <GetNextURL+0x341>
jmp    14f4 <GetNextURL+0x354>
jmp    14e6 <GetNextURL+0x346>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    14ab <GetNextURL+0x30b>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1060 <strcpy@plt>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1090 <strncat@plt>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x18(%rbp),%rdi
call   1070 <strlen@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jl     158a <GetNextURL+0x3ea>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1577 <GetNextURL+0x3d7>
jmp    158a <GetNextURL+0x3ea>
jmp    157c <GetNextURL+0x3dc>
mov    -0x30(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x30(%rbp)
jmp    1553 <GetNextURL+0x3b3>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jl     15ca <GetNextURL+0x42a>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    15b7 <GetNextURL+0x417>
jmp    15ca <GetNextURL+0x42a>
jmp    15bc <GetNextURL+0x41c>
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1593 <GetNextURL+0x3f3>
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    162a <GetNextURL+0x48a>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1060 <strcpy@plt>
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1090 <strncat@plt>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
cmpl   $0x6,-0x30(%rbp)
jle    1640 <GetNextURL+0x4a0>
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jle    168a <GetNextURL+0x4ea>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1060 <strcpy@plt>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x2f,(%rax,%rcx,1)
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1090 <strncat@plt>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1060 <strcpy@plt>
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1090 <strncat@plt>
mov    -0x48(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
add    $0x1,%rax
mov    %eax,-0x4(%rbp)
jmp    16e0 <GetNextURL+0x540>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GetNextURL>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %ecx,%ebp
mov    %rdx,0x8(%rsp)
mov    %rsi,%r12
mov    %rdi,%rbx
test   %ebp,%ebp
jne    11b7 <GetNextURL+0x27>
mov    %rbx,%rdi
call   1040 <removeWhiteSpace@plt>
movslq %ebp,%rbp
jmp    11d0 <GetNextURL+0x40>
nopl   0x0(%rax)
lea    0x1(%r14),%rbp
movzbl 0x1(%rbx,%r14,1),%eax
or     $0x20,%al
cmp    $0x61,%al
je     11f0 <GetNextURL+0x60>
mov    %rbp,%r14
movzbl (%rbx,%rbp,1),%eax
cmp    $0x3c,%al
je     11c0 <GetNextURL+0x30>
test   %al,%al
je     12de <GetNextURL+0x14e>
add    $0x1,%r14
mov    %r14,%rbp
jmp    11d0 <GetNextURL+0x40>
nopl   0x0(%rax)
lea    (%rbx,%rbp,1),%rdi
mov    $0x3d,%esi
call   1080 <strchr@plt>
test   %rax,%rax
je     11ab <GetNextURL+0x1b>
mov    %rax,%r13
cmpb   $0x65,-0x1(%rax)
je     11ab <GetNextURL+0x1b>
mov    %r13,%rcx
sub    %r14,%rcx
sub    %rbx,%rcx
cmp    $0xa,%rcx
jg     11ab <GetNextURL+0x1b>
mov    0x1(%r13),%al
cmp    $0x27,%al
je     1227 <GetNextURL+0x97>
cmp    $0x22,%al
jne    122b <GetNextURL+0x9b>
add    $0x1,%r13
add    $0x1,%r13
mov    %r13,%rdi
lea    0xdc7(%rip),%rsi
call   10a0 <strpbrk@plt>
test   %rax,%rax
je     11ab <GetNextURL+0x1b>
cmpb   $0x23,0x0(%r13)
je     11ab <GetNextURL+0x1b>
mov    %rax,%r15
mov    %r13,%rdi
lea    0xda5(%rip),%rsi
mov    $0x7,%edx
call   1050 <strncmp@plt>
test   %eax,%eax
je     11ab <GetNextURL+0x1b>
mov    %r13,%rdi
lea    0xd91(%rip),%rsi
mov    $0x4,%edx
call   1050 <strncmp@plt>
test   %eax,%eax
je     12f6 <GetNextURL+0x166>
mov    %r13,%rdi
lea    0xd7e(%rip),%rsi
mov    $0x4,%edx
call   1050 <strncmp@plt>
test   %eax,%eax
je     12f6 <GetNextURL+0x166>
mov    0x0(%r13),%al
cmp    $0x2e,%al
jne    130e <GetNextURL+0x17e>
sub    %r13d,%r15d
mov    0x8(%rsp),%rbp
mov    %rbp,%rdi
mov    %r13,%rsi
mov    %r15d,%edx
call   1030 <strncpy@plt>
mov    %r12,%rdi
mov    %rbp,%rsi
call   10b0 <relativeUrl@plt>
test   %eax,%eax
jg     13d3 <GetNextURL+0x243>
lea    (%r14,%r15,1),%ebp
add    $0x1,%ebp
jmp    11ab <GetNextURL+0x1b>
mov    $0xffffffff,%r15d
mov    %r15d,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r15d,%edx
sub    %r13d,%edx
mov    0x8(%rsp),%rdi
mov    %r13,%rsi
call   1030 <strncpy@plt>
jmp    1421 <GetNextURL+0x291>
mov    %r12,%rdi
cmp    $0x2f,%al
jne    1368 <GetNextURL+0x1d8>
call   1070 <strlen@plt>
mov    $0x7,%ebp
cmp    $0x8,%eax
jl     1343 <GetNextURL+0x1b3>
mov    $0x7,%ebp
cmpb   $0x2f,(%r12,%rbp,1)
je     1343 <GetNextURL+0x1b3>
add    $0x1,%rbp
mov    %r12,%rdi
call   1070 <strlen@plt>
cltq
cmp    %rax,%rbp
jl     1329 <GetNextURL+0x199>
mov    0x8(%rsp),%r14
mov    %r14,%rdi
mov    %r12,%rsi
call   1060 <strcpy@plt>
mov    %ebp,%eax
movb   $0x0,(%r14,%rax,1)
mov    %r15d,%edx
sub    %r13d,%edx
mov    %r14,%rdi
jmp    1419 <GetNextURL+0x289>
call   1070 <strlen@plt>
test   %eax,%eax
jle    13ad <GetNextURL+0x21d>
lea    -0x1(%rax),%edx
mov    %eax,%ecx
lea    -0x1(%rcx),%ebp
cmpb   $0x2f,(%r12,%rbp,1)
je     138a <GetNextURL+0x1fa>
add    $0xffffffff,%ecx
jg     1376 <GetNextURL+0x1e6>
mov    $0xffffffff,%ebp
mov    %edx,%r14d
test   %eax,%eax
jle    13a9 <GetNextURL+0x219>
mov    %eax,%ecx
lea    -0x1(%rcx),%r14d
cmpb   $0x2e,(%r12,%r14,1)
je     13a9 <GetNextURL+0x219>
add    $0xffffffff,%ecx
jg     1393 <GetNextURL+0x203>
mov    $0xffffffff,%r14d
cmp    %edx,%ebp
jne    13db <GetNextURL+0x24b>
mov    0x8(%rsp),%rbp
mov    %rbp,%rdi
mov    %r12,%rsi
mov    %rax,%r14
call   1060 <strcpy@plt>
movslq %r14d,%rax
movb   $0x0,0x0(%rbp,%rax,1)
mov    %r15d,%edx
sub    %r13d,%edx
mov    %rbp,%rdi
jmp    1419 <GetNextURL+0x289>
mov    %eax,%r15d
jmp    12e4 <GetNextURL+0x154>
mov    %rax,0x10(%rsp)
mov    0x8(%rsp),%rdi
mov    %r12,%rsi
call   1060 <strcpy@plt>
cmp    $0x7,%ebp
jl     1405 <GetNextURL+0x275>
cmp    %r14d,%ebp
jg     1405 <GetNextURL+0x275>
mov    %ebp,%eax
mov    0x8(%rsp),%rdi
movb   $0x0,0x1(%rax,%rdi,1)
jmp    1413 <GetNextURL+0x283>
movslq 0x10(%rsp),%rax
mov    0x8(%rsp),%rdi
movb   $0x2f,(%rdi,%rax,1)
mov    %r15d,%edx
sub    %r13d,%edx
mov    %r13,%rsi
call   1090 <strncat@plt>
sub    %ebx,%r15d
add    $0x1,%r15d
jmp    12e4 <GetNextURL+0x154>

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

LLVM IR (-O2):
@.str = [4 x i8] c"'\22>\00"
@.str.1 = [8 x i8] c"mailto:\00"
@.str.2 = [5 x i8] c"http\00"
@.str.3 = [5 x i8] c"HTTP\00"
define i32 @GetNextURL(i8* %0, i8* %1, i8* %2, i32 %3) {
%5 = ptrtoint i8* %0 to i64
br label %6
6: ; preds = %31, %4
%7 = phi i32 [ %3, %4 ], [ %32, %31 ]
%8 = icmp eq i32 %7, 0
br i1 %8, label %9, label %11
9: ; preds = %6
%10 = tail call i32 @removeWhiteSpace(i8* %0)
br label %11
11: ; preds = %9, %6
%12 = sext i32 %7 to i64
br label %13
13: ; preds = %19, %11
%14 = phi i64 [ %12, %11 ], [ %20, %19 ]
%15 = getelementptr inbounds i8, i8* %0, i64 %14
%16 = load i8, i8* %15
switch i8 %16, label %17 [
i8 60, label %21
i8 0, label %178
]
17: ; preds = %13
%18 = add i64 %14, 1
br label %19
19: ; preds = %17, %21
%20 = phi i64 [ %18, %17 ], [ %22, %21 ]
br label %13
21: ; preds = %13
%22 = add i64 %14, 1
%23 = getelementptr inbounds i8, i8* %0, i64 %22
%24 = load i8, i8* %23
switch i8 %24, label %19 [
i8 97, label %25
i8 65, label %25
]
25: ; preds = %21, %21
%26 = getelementptr inbounds i8, i8* %0, i64 %22
%27 = trunc i64 %22 to i32
%28 = trunc i64 %14 to i32
%29 = tail call i8* @strchr(i8* dereferenceable(1) %26, i8 signext 61)
%30 = icmp eq i8* %29, null
br i1 %30, label %31, label %33
31: ; preds = %25, %33, %37, %85, %46, %51, %54
%32 = phi i32 [ %87, %85 ], [ %27, %46 ], [ %27, %51 ], [ %27, %54 ], [ %27, %37 ], [ %27, %33 ], [ %27, %25 ]
br label %6
33: ; preds = %25
%34 = getelementptr inbounds i8, i8* %29, i64 -1
%35 = load i8, i8* %34
%36 = icmp eq i8 %35, 101
br i1 %36, label %31, label %37
37: ; preds = %33
%38 = ptrtoint i8* %29 to i64
%39 = add i64 %14, %5
%40 = sub i64 %38, %39
%41 = icmp sgt i64 %40, 10
br i1 %41, label %31, label %42
42: ; preds = %37
%43 = getelementptr inbounds i8, i8* %29, i64 1
%44 = load i8, i8* %43
switch i8 %44, label %46 [
i8 34, label %45
i8 39, label %45
]
45: ; preds = %42, %42
br label %46
46: ; preds = %42, %45
%47 = phi i8* [ %43, %45 ], [ %29, %42 ]
%48 = getelementptr inbounds i8, i8* %47, i64 1
%49 = tail call i8* @strpbrk(i8* %48, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%50 = icmp eq i8* %49, null
br i1 %50, label %31, label %51
51: ; preds = %46
%52 = load i8, i8* %48
%53 = icmp eq i8 %52, 35
br i1 %53, label %31, label %54
54: ; preds = %51
%55 = tail call i32 @strncmp(i8* %48, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i32 7)
%56 = icmp eq i32 %55, 0
br i1 %56, label %31, label %57
57: ; preds = %54
%58 = tail call i32 @strncmp(i8* %48, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i32 4)
%59 = icmp eq i32 %58, 0
br i1 %59, label %63, label %60
60: ; preds = %57
%61 = tail call i32 @strncmp(i8* %48, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i32 4)
%62 = icmp eq i32 %61, 0
br i1 %62, label %63, label %72
63: ; preds = %60, %57
%64 = ptrtoint i8* %49 to i64
%65 = ptrtoint i8* %48 to i64
%66 = sub i64 %64, %65
%67 = trunc i64 %66 to i32
%68 = tail call i32 @strncpy(i8* %2, i8* %48, i32 %67)
%69 = sub i64 %64, %5
%70 = trunc i64 %69 to i32
%71 = add i32 %70, 1
br label %178
72: ; preds = %60
%73 = load i8, i8* %48
switch i8 %73, label %111 [
i8 46, label %77
i8 47, label %74
]
74: ; preds = %72
%75 = tail call i32 @strlen(i8* %1)
%76 = icmp sgt i32 %75, 7
br i1 %76, label %88, label %98
77: ; preds = %72
%78 = ptrtoint i8* %49 to i64
%79 = ptrtoint i8* %48 to i64
%80 = sub i64 %78, %79
%81 = trunc i64 %80 to i32
%82 = tail call i32 @strncpy(i8* %2, i8* %48, i32 %81)
%83 = tail call i32 @relativeUrl(i8* %1, i8* %2)
%84 = icmp sgt i32 %83, 0
br i1 %84, label %178, label %85
85: ; preds = %77
%86 = add i32 %28, 1
%87 = add i32 %86, %81
br label %31
88: ; preds = %74, %93
%89 = phi i64 [ %94, %93 ], [ 7, %74 ]
%90 = getelementptr inbounds i8, i8* %1, i64 %89
%91 = load i8, i8* %90
%92 = icmp eq i8 %91, 47
br i1 %92, label %98, label %93
93: ; preds = %88
%94 = add nuw nsw i64 %89, 1
%95 = tail call i32 @strlen(i8* %1)
%96 = sext i32 %95 to i64
%97 = icmp slt i64 %94, %96
br i1 %97, label %88, label %98
98: ; preds = %93, %88, %74
%99 = phi i64 [ 7, %74 ], [ %89, %88 ], [ %94, %93 ]
%100 = tail call i32 @strcpy(i8* %2, i8* %1)
%101 = and i64 %99, 4294967295
%102 = getelementptr inbounds i8, i8* %2, i64 %101
store i8 0, i8* %102
%103 = ptrtoint i8* %49 to i64
%104 = ptrtoint i8* %48 to i64
%105 = sub i64 %103, %104
%106 = trunc i64 %105 to i32
%107 = tail call i32 @strncat(i8* %2, i8* %48, i32 %106)
%108 = sub i64 %103, %5
%109 = trunc i64 %108 to i32
%110 = add i32 %109, 1
br label %178
111: ; preds = %72
%112 = tail call i32 @strlen(i8* %1)
%113 = add nsw i32 %112, -1
%114 = icmp sgt i32 %112, 0
br i1 %114, label %115, label %138
115: ; preds = %111, %121
%116 = phi i32 [ %122, %121 ], [ %113, %111 ]
%117 = zext i32 %116 to i64
%118 = getelementptr inbounds i8, i8* %1, i64 %117
%119 = load i8, i8* %118
%120 = icmp eq i8 %119, 47
br i1 %120, label %124, label %121
121: ; preds = %115
%122 = add nsw i32 %116, -1
%123 = icmp sgt i32 %116, 0
br i1 %123, label %115, label %124
124: ; preds = %121, %115
%125 = phi i32 [ -1, %121 ], [ %116, %115 ]
br i1 %114, label %126, label %135
126: ; preds = %124, %132
%127 = phi i32 [ %133, %132 ], [ %113, %124 ]
%128 = zext i32 %127 to i64
%129 = getelementptr inbounds i8, i8* %1, i64 %128
%130 = load i8, i8* %129
%131 = icmp eq i8 %130, 46
br i1 %131, label %135, label %132
132: ; preds = %126
%133 = add nsw i32 %127, -1
%134 = icmp sgt i32 %127, 0
br i1 %134, label %126, label %135
135: ; preds = %132, %126, %124
%136 = phi i32 [ %113, %124 ], [ %127, %126 ], [ -1, %132 ]
%137 = icmp eq i32 %125, %113
br i1 %137, label %138, label %150
138: ; preds = %111, %135
%139 = tail call i32 @strcpy(i8* %2, i8* %1)
%140 = sext i32 %112 to i64
%141 = getelementptr inbounds i8, i8* %2, i64 %140
store i8 0, i8* %141
%142 = ptrtoint i8* %49 to i64
%143 = ptrtoint i8* %48 to i64
%144 = sub i64 %142, %143
%145 = trunc i64 %144 to i32
%146 = tail call i32 @strncat(i8* %2, i8* %48, i32 %145)
%147 = sub i64 %142, %5
%148 = trunc i64 %147 to i32
%149 = add i32 %148, 1
br label %178
150: ; preds = %135
%151 = icmp slt i32 %125, 7
%152 = icmp sgt i32 %125, %136
%153 = select i1 %151, i1 true, i1 %152
%154 = tail call i32 @strcpy(i8* %2, i8* %1)
br i1 %153, label %155, label %166
155: ; preds = %150
%156 = sext i32 %112 to i64
%157 = getelementptr inbounds i8, i8* %2, i64 %156
store i8 47, i8* %157
%158 = ptrtoint i8* %49 to i64
%159 = ptrtoint i8* %48 to i64
%160 = sub i64 %158, %159
%161 = trunc i64 %160 to i32
%162 = tail call i32 @strncat(i8* %2, i8* %48, i32 %161)
%163 = sub i64 %158, %5
%164 = trunc i64 %163 to i32
%165 = add i32 %164, 1
br label %178
166: ; preds = %150
%167 = add nuw nsw i32 %125, 1
%168 = zext i32 %167 to i64
%169 = getelementptr inbounds i8, i8* %2, i64 %168
store i8 0, i8* %169
%170 = ptrtoint i8* %49 to i64
%171 = ptrtoint i8* %48 to i64
%172 = sub i64 %170, %171
%173 = trunc i64 %172 to i32
%174 = tail call i32 @strncat(i8* %2, i8* %48, i32 %173)
%175 = sub i64 %170, %5
%176 = trunc i64 %175 to i32
%177 = add i32 %176, 1
br label %178
178: ; preds = %77, %13, %166, %155, %138, %98, %63
%179 = phi i32 [ %110, %98 ], [ %149, %138 ], [ %165, %155 ], [ %177, %166 ], [ %71, %63 ], [ -1, %13 ], [ %83, %77 ]
ret i32 %179
}