#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 */
typedef struct TYPE_3__ TYPE_1__;

/* Type definitions */
struct tm {
  int tm_sec;
  int tm_year;
  int tm_mon;
  int tm_mday;
  int tm_hour;
  int tm_min;
};
struct TYPE_3__ {
  scalar_t__ type;
  int length;
  scalar_t__ data;
};
typedef TYPE_1__ ASN1_GENERALIZEDTIME;

/* Variables and functions */
int /*<<< orphan*/ OPENSSL_gmtime_adj(struct tm *, int /*<<< orphan*/, int);
scalar_t__ V_ASN1_GENERALIZEDTIME;
int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d) {
  static const int min[9] = {0, 0, 1, 1, 0, 0, 0, 0, 0};
  static const int max[9] = {99, 99, 12, 31, 23, 59, 59, 12, 59};
  char *a;
  int n, i, l, o;
  if (d->type != V_ASN1_GENERALIZEDTIME)
    return (0);
  l = d->length;
  a = (char *)d->data;
  o = 0;
  if (l < 13)
    goto err;
  for (i = 0; i < 7; i++) {
    if ((i == 6) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) {
      i++;
      if (tm)
        tm->tm_sec = 0;
      break;
    }
    if ((a[o] < '0') || (a[o] > '9'))
      goto err;
    n = a[o] - '0';
    if (++o > l)
      goto err;
    if ((a[o] < '0') || (a[o] > '9'))
      goto err;
    n = (n * 10) + a[o] - '0';
    if (++o > l)
      goto err;
    if ((n < min[i]) || (n > max[i]))
      goto err;
    if (tm) {
      switch (i) {
      case 0:
        tm->tm_year = n * 100 - 1900;
        break;
      case 1:
        tm->tm_year += n;
        break;
      case 2:
        tm->tm_mon = n - 1;
        break;
      case 3:
        tm->tm_mday = n;
        break;
      case 4:
        tm->tm_hour = n;
        break;
      case 5:
        tm->tm_min = n;
        break;
      case 6:
        tm->tm_sec = n;
        break;
      }
    }
  }
  if (a[o] == '.') {
    if (++o > l)
      goto err;
    i = o;
    while ((a[o] >= '0') && (a[o] <= '9') && (o <= l))
      o++;
    if (i == o)
      goto err;
  }
  if (a[o] == 'Z')
    o++;
  else if ((a[o] == '+') || (a[o] == '-')) {
    int offsign = a[o] == '-' ? -1 : 1, offset = 0;
    o++;
    if (o + 4 > l)
      goto err;
    for (i = 7; i < 9; i++) {
      if ((a[o] < '0') || (a[o] > '9'))
        goto err;
      n = a[o] - '0';
      o++;
      if ((a[o] < '0') || (a[o] > '9'))
        goto err;
      n = (n * 10) + a[o] - '0';
      if ((n < min[i]) || (n > max[i]))
        goto err;
      if (tm) {
        if (i == 7)
          offset = n * 3600;
        else if (i == 8)
          offset += n * 60;
      }
      o++;
    }
    if (offset && !OPENSSL_gmtime_adj(tm, 0, offset * offsign))
      return 0;
  } else if (a[o]) {
    goto err;
  }
  return (o == l);
err:
  return (0);
}


x86 assembly (clang, -O0):
<asn1_generalizedtime_to_tm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    0x2eba(%rip),%rcx
cmp    (%rcx),%rax
je     1143 <asn1_generalizedtime_to_tm+0x33>
movl   $0x0,-0x4(%rbp)
jmp    1665 <asn1_generalizedtime_to_tm+0x555>
mov    -0x18(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0xd,-0x2c(%rbp)
jge    116f <asn1_generalizedtime_to_tm+0x5f>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
movl   $0x0,-0x28(%rbp)
cmpl   $0x7,-0x28(%rbp)
jge    138d <asn1_generalizedtime_to_tm+0x27d>
cmpl   $0x6,-0x28(%rbp)
jne    11ec <asn1_generalizedtime_to_tm+0xdc>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
je     11c9 <asn1_generalizedtime_to_tm+0xb9>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     11c9 <asn1_generalizedtime_to_tm+0xb9>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    11ec <asn1_generalizedtime_to_tm+0xdc>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     11e7 <asn1_generalizedtime_to_tm+0xd7>
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
jmp    138d <asn1_generalizedtime_to_tm+0x27d>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1216 <asn1_generalizedtime_to_tm+0x106>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    121b <asn1_generalizedtime_to_tm+0x10b>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmp    -0x2c(%rbp),%eax
jle    1244 <asn1_generalizedtime_to_tm+0x134>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     126e <asn1_generalizedtime_to_tm+0x15e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1273 <asn1_generalizedtime_to_tm+0x163>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
imul   $0xa,-0x24(%rbp),%eax
mov    -0x20(%rbp),%rcx
movslq -0x30(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmp    -0x2c(%rbp),%eax
jle    12a2 <asn1_generalizedtime_to_tm+0x192>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xd70(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jl     12d0 <asn1_generalizedtime_to_tm+0x1c0>
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xd89(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jle    12d5 <asn1_generalizedtime_to_tm+0x1c5>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
cmpq   $0x0,-0x10(%rbp)
je     137a <asn1_generalizedtime_to_tm+0x26a>
mov    -0x28(%rbp),%eax
mov    %rax,-0x40(%rbp)
sub    $0x6,%rax
ja     1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x40(%rbp),%rax
lea    0xd04(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
imul   $0x64,-0x24(%rbp),%ecx
sub    $0x76c,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
jmp    1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
add    0x4(%rax),%ecx
mov    %ecx,0x4(%rax)
jmp    1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
jmp    1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
jmp    1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
jmp    1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
jmp    1375 <asn1_generalizedtime_to_tm+0x265>
mov    -0x24(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    137a <asn1_generalizedtime_to_tm+0x26a>
jmp    137f <asn1_generalizedtime_to_tm+0x26f>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1176 <asn1_generalizedtime_to_tm+0x66>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    1433 <asn1_generalizedtime_to_tm+0x323>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmp    -0x2c(%rbp),%eax
jle    13b9 <asn1_generalizedtime_to_tm+0x2a9>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
mov    -0x30(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x41(%rbp)
jl     13ff <asn1_generalizedtime_to_tm+0x2ef>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x39,%ecx
mov    %al,-0x41(%rbp)
jg     13ff <asn1_generalizedtime_to_tm+0x2ef>
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
setle  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    140f <asn1_generalizedtime_to_tm+0x2ff>
jmp    141d <asn1_generalizedtime_to_tm+0x30d>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    13bf <asn1_generalizedtime_to_tm+0x2af>
mov    -0x28(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    142e <asn1_generalizedtime_to_tm+0x31e>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
jmp    1433 <asn1_generalizedtime_to_tm+0x323>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jne    1456 <asn1_generalizedtime_to_tm+0x346>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1648 <asn1_generalizedtime_to_tm+0x538>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     1480 <asn1_generalizedtime_to_tm+0x370>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1627 <asn1_generalizedtime_to_tm+0x517>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%eax
mov    $0xffffffff,%ecx
cmp    $0x2d,%edx
cmove  %ecx,%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x4,%eax
cmp    -0x2c(%rbp),%eax
jle    14c3 <asn1_generalizedtime_to_tm+0x3b3>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
movl   $0x7,-0x28(%rbp)
cmpl   $0x9,-0x28(%rbp)
jge    15f1 <asn1_generalizedtime_to_tm+0x4e1>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     14fe <asn1_generalizedtime_to_tm+0x3ee>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1503 <asn1_generalizedtime_to_tm+0x3f3>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1548 <asn1_generalizedtime_to_tm+0x438>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    154d <asn1_generalizedtime_to_tm+0x43d>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
imul   $0xa,-0x24(%rbp),%eax
mov    -0x20(%rbp),%rcx
movslq -0x30(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xaad(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jl     1593 <asn1_generalizedtime_to_tm+0x483>
mov    -0x24(%rbp),%eax
movslq -0x28(%rbp),%rdx
lea    0xac6(%rip),%rcx
cmp    (%rcx,%rdx,4),%eax
jle    1598 <asn1_generalizedtime_to_tm+0x488>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
cmpq   $0x0,-0x10(%rbp)
je     15da <asn1_generalizedtime_to_tm+0x4ca>
cmpl   $0x7,-0x28(%rbp)
jne    15bc <asn1_generalizedtime_to_tm+0x4ac>
imul   $0xe10,-0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    15d5 <asn1_generalizedtime_to_tm+0x4c5>
cmpl   $0x8,-0x28(%rbp)
jne    15d0 <asn1_generalizedtime_to_tm+0x4c0>
imul   $0x3c,-0x24(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    15d5 <asn1_generalizedtime_to_tm+0x4c5>
jmp    15da <asn1_generalizedtime_to_tm+0x4ca>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    14ca <asn1_generalizedtime_to_tm+0x3ba>
cmpl   $0x0,-0x38(%rbp)
je     1622 <asn1_generalizedtime_to_tm+0x512>
mov    -0x10(%rbp),%rdi
mov    -0x38(%rbp),%edx
imul   -0x34(%rbp),%edx
xor    %esi,%esi
call   1030 <OPENSSL_gmtime_adj@plt>
cmp    $0x0,%eax
jne    1622 <asn1_generalizedtime_to_tm+0x512>
movl   $0x0,-0x4(%rbp)
jmp    1665 <asn1_generalizedtime_to_tm+0x555>
jmp    1643 <asn1_generalizedtime_to_tm+0x533>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
cmpb   $0x0,(%rax,%rcx,1)
je     163e <asn1_generalizedtime_to_tm+0x52e>
jmp    165e <asn1_generalizedtime_to_tm+0x54e>
jmp    1643 <asn1_generalizedtime_to_tm+0x533>
jmp    1648 <asn1_generalizedtime_to_tm+0x538>
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    1665 <asn1_generalizedtime_to_tm+0x555>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<asn1_generalizedtime_to_tm>:
push   %rbp
push   %r14
push   %rbx
mov    (%rsi),%rax
mov    0x2eca(%rip),%rcx
xor    %ebx,%ebx
cmp    (%rcx),%rax
jne    12c1 <asn1_generalizedtime_to_tm+0x1b1>
mov    0x8(%rsi),%ebp
cmp    $0xd,%ebp
jl     12c1 <asn1_generalizedtime_to_tm+0x1b1>
mov    0x10(%rsi),%rax
movsbl (%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x1(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffd8c,%esi
cmp    $0xffffff9c,%esi
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
test   %rdi,%rdi
je     1188 <asn1_generalizedtime_to_tm+0x78>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffe20,%ecx
imul   $0x64,%ecx,%ecx
add    $0xffffe5d4,%ecx
mov    %ecx,0x4(%rdi)
movsbl 0x2(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x3(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffd8c,%esi
cmp    $0xffffff9c,%esi
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
test   %rdi,%rdi
je     11cf <asn1_generalizedtime_to_tm+0xbf>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
add    %ecx,0x4(%rdi)
movsbl 0x4(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x5(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffde3,%esi
cmp    $0xfffffff4,%esi
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
test   %rdi,%rdi
je     1219 <asn1_generalizedtime_to_tm+0x109>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffe20,%ecx
add    $0xffffffcf,%ecx
mov    %ecx,0x8(%rdi)
movsbl 0x6(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x7(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffdd0,%esi
cmp    $0xffffffe1,%esi
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
test   %rdi,%rdi
je     125c <asn1_generalizedtime_to_tm+0x14c>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0xc(%rdi)
movsbl 0x8(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x9(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffdd8,%esi
cmp    $0xffffffe8,%esi
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
test   %rdi,%rdi
je     1297 <asn1_generalizedtime_to_tm+0x187>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0x10(%rdi)
movsbl 0xa(%rax),%edx
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0xb(%rax),%ecx
lea    -0x3a(%rcx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%edx
lea    (%rcx,%rdx,2),%esi
add    $0xfffffdb4,%esi
cmp    $0xffffffc4,%esi
jae    12c8 <asn1_generalizedtime_to_tm+0x1b8>
mov    %ebx,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret
test   %rdi,%rdi
je     12d9 <asn1_generalizedtime_to_tm+0x1c9>
lea    (%rcx,%rdx,2),%ecx
add    $0xfffffdf0,%ecx
mov    %ecx,0x14(%rdi)
movsbl 0xc(%rax),%ecx
lea    -0x2b(%rcx),%edx
cmp    $0x2f,%dl
ja     1396 <asn1_generalizedtime_to_tm+0x286>
movzbl %dl,%edx
movabs $0x800000000005,%rsi
bt     %rdx,%rsi
jae    1396 <asn1_generalizedtime_to_tm+0x286>
xor    %edx,%edx
mov    $0xc,%r8d
test   %rdi,%rdi
je     130f <asn1_generalizedtime_to_tm+0x1ff>
mov    %edx,(%rdi)
mov    %r8d,%edx
cmpb   $0x2e,(%rax,%rdx,1)
jne    1351 <asn1_generalizedtime_to_tm+0x241>
cmp    %ebp,%r8d
jae    12c1 <asn1_generalizedtime_to_tm+0x1b1>
or     $0x1,%r8d
mov    %r8d,%esi
xor    %edx,%edx
movzbl (%rax,%rsi,1),%ecx
add    $0xc6,%cl
add    $0xffffffff,%edx
cmp    $0xf6,%cl
jb     1340 <asn1_generalizedtime_to_tm+0x230>
lea    0x1(%rsi),%rcx
cmp    %esi,%ebp
mov    %rcx,%rsi
jge    1326 <asn1_generalizedtime_to_tm+0x216>
cmp    $0xffffffff,%edx
je     14b4 <asn1_generalizedtime_to_tm+0x3a4>
not    %edx
add    %r8d,%edx
mov    %edx,%r8d
movslq %r8d,%rcx
mov    (%rax,%rcx,1),%sil
cmp    $0x2c,%sil
jg     1372 <asn1_generalizedtime_to_tm+0x262>
test   %sil,%sil
je     1386 <asn1_generalizedtime_to_tm+0x276>
cmp    $0x2b,%sil
je     13f1 <asn1_generalizedtime_to_tm+0x2e1>
jmp    12c1 <asn1_generalizedtime_to_tm+0x1b1>
cmp    $0x2d,%sil
je     13f1 <asn1_generalizedtime_to_tm+0x2e1>
cmp    $0x5a,%sil
jne    12c1 <asn1_generalizedtime_to_tm+0x1b1>
add    $0x1,%r8d
mov    %r8d,%r14d
xor    %ebx,%ebx
cmp    %ebp,%r14d
sete   %bl
jmp    12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    -0x30(%rcx),%edx
cmp    $0x9,%dl
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0xd(%rax),%edx
lea    -0x3a(%rdx),%esi
cmp    $0xf6,%sil
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
cmp    $0xe,%ebp
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rcx,%rcx,4),%ecx
lea    (%rdx,%rcx,2),%edx
add    $0xfffffe20,%edx
cmp    $0x30,%edx
jl     12c1 <asn1_generalizedtime_to_tm+0x1b1>
cmp    $0x6b,%edx
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
mov    $0xe,%r8d
test   %rdi,%rdi
je     130f <asn1_generalizedtime_to_tm+0x1ff>
add    $0xffffffd0,%edx
jmp    130d <asn1_generalizedtime_to_tm+0x1fd>
lea    0x5(%r8),%r14d
cmp    %ebp,%r14d
jg     12c1 <asn1_generalizedtime_to_tm+0x1b1>
add    $0x1,%r8d
movslq %r8d,%r9
movsbl (%rax,%r9,1),%edx
lea    -0x3a(%rdx),%ecx
cmp    $0xf6,%cl
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x1(%r9,%rax,1),%r8d
lea    -0x3a(%r8),%ecx
cmp    $0xf6,%cl
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%rdx,%rdx,4),%ecx
lea    (%r8,%rcx,2),%edx
add    $0xfffffdf0,%edx
cmp    $0xc,%edx
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movsbl 0x2(%r9,%rax,1),%r8d
lea    -0x3a(%r8),%ecx
cmp    $0xf6,%cl
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
movzbl 0x3(%r9,%rax,1),%eax
lea    -0x3a(%rax),%ecx
cmp    $0xf6,%cl
jb     12c1 <asn1_generalizedtime_to_tm+0x1b1>
lea    (%r8,%r8,4),%ecx
lea    (%rax,%rcx,2),%eax
add    $0xfffffdf0,%eax
cmp    $0x3b,%eax
ja     12c1 <asn1_generalizedtime_to_tm+0x1b1>
test   %rdi,%rdi
je     1389 <asn1_generalizedtime_to_tm+0x279>
imul   $0xe10,%edx,%ecx
imul   $0x3c,%eax,%eax
add    %ecx,%eax
je     1389 <asn1_generalizedtime_to_tm+0x279>
mov    %eax,%edx
neg    %edx
cmp    $0x2d,%sil
cmovne %eax,%edx
xor    %ebx,%ebx
xor    %esi,%esi
call   1030 <OPENSSL_gmtime_adj@plt>
test   %eax,%eax
jne    1389 <asn1_generalizedtime_to_tm+0x279>
jmp    12c1 <asn1_generalizedtime_to_tm+0x1b1>
xor    %ebx,%ebx
jmp    12c1 <asn1_generalizedtime_to_tm+0x1b1>

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

LLVM IR (-O2):
%struct.tm = type { i32, i32, i32, i32, i32, i32 }
%struct.TYPE_3__ = type { i64, i32, i64 }
@V_ASN1_GENERALIZEDTIME = global i64 0
define i32 @asn1_generalizedtime_to_tm(%struct.tm* %0, %struct.TYPE_3__* nocapture %1) {
%3 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %1, i64 0, i32 0
%4 = load i64, i64* %3
%5 = load i64, i64* @V_ASN1_GENERALIZEDTIME
%6 = icmp eq i64 %4, %5
br i1 %6, label %7, label %267
7: ; preds = %2
%8 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %1, i64 0, i32 1
%9 = load i32, i32* %8
%10 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %1, i64 0, i32 2
%11 = load i64, i64* %10
%12 = inttoptr i64 %11 to i8*
%13 = icmp slt i32 %9, 13
br i1 %13, label %267, label %15
14: ; preds = %150, %150, %150
br i1 %16, label %177, label %174
15: ; preds = %7
%16 = icmp eq %struct.tm* %0, null
%17 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 0
%18 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 5
%19 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 4
%20 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 3
%21 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 2
%22 = getelementptr inbounds %struct.tm, %struct.tm* %0, i64 0, i32 1
%23 = load i8, i8* %12
%24 = sext i8 %23 to i32
%25 = add i8 %23, -48
%26 = icmp ult i8 %25, 10
br i1 %26, label %27, label %267
27: ; preds = %15
%28 = getelementptr inbounds i8, i8* %12, i64 1
%29 = load i8, i8* %28
%30 = add i8 %29, -58
%31 = icmp ult i8 %30, -10
br i1 %31, label %267, label %32
32: ; preds = %27
%33 = zext i8 %29 to i32
%34 = mul nsw i32 %24, 10
%35 = add nsw i32 %34, -480
%36 = add nsw i32 %35, %33
%37 = add nsw i32 %36, -148
%38 = icmp ult i32 %37, -100
br i1 %38, label %267, label %39
39: ; preds = %32
br i1 %16, label %43, label %40
40: ; preds = %39
%41 = mul nuw nsw i32 %36, 100
%42 = add nsw i32 %41, -6700
store i32 %42, i32* %22
br label %43
43: ; preds = %39, %40
%44 = getelementptr inbounds i8, i8* %12, i64 2
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = add i8 %45, -48
%48 = icmp ult i8 %47, 10
br i1 %48, label %49, label %267
49: ; preds = %43
%50 = getelementptr inbounds i8, i8* %12, i64 3
%51 = load i8, i8* %50
%52 = add i8 %51, -58
%53 = icmp ult i8 %52, -10
br i1 %53, label %267, label %54
54: ; preds = %49
%55 = zext i8 %51 to i32
%56 = mul nsw i32 %46, 10
%57 = add nsw i32 %56, -480
%58 = add nsw i32 %57, %55
%59 = add nsw i32 %58, -48
%60 = add nsw i32 %58, -148
%61 = icmp ult i32 %60, -100
br i1 %61, label %267, label %62
62: ; preds = %54
br i1 %16, label %66, label %63
63: ; preds = %62
%64 = load i32, i32* %22
%65 = add nsw i32 %64, %59
store i32 %65, i32* %22
br label %66
66: ; preds = %63, %62
%67 = getelementptr inbounds i8, i8* %12, i64 4
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = add i8 %68, -48
%71 = icmp ult i8 %70, 10
br i1 %71, label %72, label %267
72: ; preds = %66
%73 = getelementptr inbounds i8, i8* %12, i64 5
%74 = load i8, i8* %73
%75 = add i8 %74, -58
%76 = icmp ult i8 %75, -10
br i1 %76, label %267, label %77
77: ; preds = %72
%78 = zext i8 %74 to i32
%79 = mul nsw i32 %69, 10
%80 = add nsw i32 %79, -480
%81 = add nsw i32 %80, %78
%82 = add nsw i32 %81, -61
%83 = icmp ult i32 %82, -12
br i1 %83, label %267, label %84
84: ; preds = %77
br i1 %16, label %87, label %85
85: ; preds = %84
%86 = add nsw i32 %81, -49
store i32 %86, i32* %21
br label %87
87: ; preds = %85, %84
%88 = getelementptr inbounds i8, i8* %12, i64 6
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = add i8 %89, -48
%92 = icmp ult i8 %91, 10
br i1 %92, label %93, label %267
93: ; preds = %87
%94 = getelementptr inbounds i8, i8* %12, i64 7
%95 = load i8, i8* %94
%96 = add i8 %95, -58
%97 = icmp ult i8 %96, -10
br i1 %97, label %267, label %98
98: ; preds = %93
%99 = zext i8 %95 to i32
%100 = mul nsw i32 %90, 10
%101 = add nsw i32 %100, -480
%102 = add nsw i32 %101, %99
%103 = add nsw i32 %102, -48
%104 = add nsw i32 %102, -80
%105 = icmp ult i32 %104, -31
br i1 %105, label %267, label %106
106: ; preds = %98
br i1 %16, label %108, label %107
107: ; preds = %106
store i32 %103, i32* %20
br label %108
108: ; preds = %107, %106
%109 = getelementptr inbounds i8, i8* %12, i64 8
%110 = load i8, i8* %109
%111 = sext i8 %110 to i32
%112 = add i8 %110, -48
%113 = icmp ult i8 %112, 10
br i1 %113, label %114, label %267
114: ; preds = %108
%115 = getelementptr inbounds i8, i8* %12, i64 9
%116 = load i8, i8* %115
%117 = add i8 %116, -58
%118 = icmp ult i8 %117, -10
br i1 %118, label %267, label %119
119: ; preds = %114
%120 = zext i8 %116 to i32
%121 = mul nsw i32 %111, 10
%122 = add nsw i32 %121, -480
%123 = add nsw i32 %122, %120
%124 = add nsw i32 %123, -48
%125 = add nsw i32 %123, -72
%126 = icmp ult i32 %125, -24
br i1 %126, label %267, label %127
127: ; preds = %119
br i1 %16, label %129, label %128
128: ; preds = %127
store i32 %124, i32* %19
br label %129
129: ; preds = %128, %127
%130 = getelementptr inbounds i8, i8* %12, i64 10
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = add i8 %131, -48
%134 = icmp ult i8 %133, 10
br i1 %134, label %135, label %267
135: ; preds = %129
%136 = getelementptr inbounds i8, i8* %12, i64 11
%137 = load i8, i8* %136
%138 = add i8 %137, -58
%139 = icmp ult i8 %138, -10
br i1 %139, label %267, label %140
140: ; preds = %135
%141 = zext i8 %137 to i32
%142 = mul nsw i32 %132, 10
%143 = add nsw i32 %142, -480
%144 = add nsw i32 %143, %141
%145 = add nsw i32 %144, -48
%146 = add nsw i32 %144, -108
%147 = icmp ult i32 %146, -60
br i1 %147, label %267, label %148
148: ; preds = %140
br i1 %16, label %150, label %149
149: ; preds = %148
store i32 %145, i32* %18
br label %150
150: ; preds = %148, %149
%151 = getelementptr inbounds i8, i8* %12, i64 12
%152 = load i8, i8* %151
switch i8 %152, label %153 [
i8 90, label %14
i8 43, label %14
i8 45, label %14
]
153: ; preds = %150
%154 = sext i8 %152 to i32
%155 = add i8 %152, -48
%156 = icmp ult i8 %155, 10
br i1 %156, label %157, label %267
157: ; preds = %153
%158 = getelementptr inbounds i8, i8* %12, i64 13
%159 = load i8, i8* %158
%160 = add i8 %159, -58
%161 = icmp ult i8 %160, -10
br i1 %161, label %267, label %162
162: ; preds = %157
%163 = zext i8 %159 to i32
%164 = mul nsw i32 %154, 10
%165 = add nsw i32 %164, -480
%166 = add nsw i32 %165, %163
%167 = icmp ult i32 %9, 14
%168 = icmp slt i32 %166, 48
%169 = select i1 %167, i1 true, i1 %168
%170 = icmp ugt i32 %166, 107
%171 = select i1 %169, i1 true, i1 %170
br i1 %171, label %267, label %172
172: ; preds = %162
%173 = add nsw i32 %166, -48
br i1 %16, label %177, label %174
174: ; preds = %172, %14
%175 = phi i32 [ 0, %14 ], [ %173, %172 ]
%176 = phi i32 [ 12, %14 ], [ 14, %172 ]
store i32 %175, i32* %17
br label %177
177: ; preds = %174, %172, %14
%178 = phi i32 [ 12, %14 ], [ 14, %172 ], [ %176, %174 ]
%179 = zext i32 %178 to i64
%180 = getelementptr inbounds i8, i8* %12, i64 %179
%181 = load i8, i8* %180
%182 = icmp eq i8 %181, 46
br i1 %182, label %183, label %201
183: ; preds = %177
%184 = or i32 %178, 1
%185 = icmp ult i32 %178, %9
br i1 %185, label %186, label %267
186: ; preds = %183
%187 = zext i32 %184 to i64
br label %188
188: ; preds = %186, %188
%189 = phi i64 [ %187, %186 ], [ %197, %188 ]
%190 = getelementptr inbounds i8, i8* %12, i64 %189
%191 = load i8, i8* %190
%192 = add i8 %191, -58
%193 = icmp ult i8 %192, -10
%194 = trunc i64 %189 to i32
%195 = icmp slt i32 %9, %194
%196 = select i1 %193, i1 true, i1 %195
%197 = add nuw nsw i64 %189, 1
br i1 %196, label %198, label %188
198: ; preds = %188
%199 = trunc i64 %189 to i32
%200 = icmp eq i32 %184, %199
br i1 %200, label %267, label %201
201: ; preds = %198, %177
%202 = phi i32 [ %199, %198 ], [ %178, %177 ]
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds i8, i8* %12, i64 %203
%205 = load i8, i8* %204
switch i8 %205, label %267 [
i8 90, label %206
i8 43, label %208
i8 45, label %208
i8 0, label %263
]
206: ; preds = %201
%207 = add nsw i32 %202, 1
br label %263
208: ; preds = %201, %201
%209 = icmp eq i8 %205, 45
%210 = add nsw i32 %202, 5
%211 = icmp sgt i32 %210, %9
br i1 %211, label %267, label %212
212: ; preds = %208
%213 = add i32 %202, 1
%214 = sext i32 %213 to i64
%215 = add i32 %202, 5
%216 = getelementptr inbounds i8, i8* %12, i64 %214
%217 = load i8, i8* %216
%218 = sext i8 %217 to i32
%219 = add i8 %217, -58
%220 = icmp ult i8 %219, -10
br i1 %220, label %267, label %221
221: ; preds = %212
%222 = add nsw i64 %214, 1
%223 = getelementptr inbounds i8, i8* %12, i64 %222
%224 = load i8, i8* %223
%225 = add i8 %224, -58
%226 = icmp ult i8 %225, -10
br i1 %226, label %267, label %227
227: ; preds = %221
%228 = zext i8 %224 to i32
%229 = mul nsw i32 %218, 10
%230 = add nsw i32 %229, -528
%231 = add nsw i32 %230, %228
%232 = icmp ugt i32 %231, 12
br i1 %232, label %267, label %233
233: ; preds = %227
%234 = mul nuw nsw i32 %231, 3600
%235 = add nsw i64 %214, 2
%236 = getelementptr inbounds i8, i8* %12, i64 %235
%237 = load i8, i8* %236
%238 = sext i8 %237 to i32
%239 = add i8 %237, -58
%240 = icmp ult i8 %239, -10
br i1 %240, label %267, label %241
241: ; preds = %233
%242 = add nsw i64 %214, 3
%243 = getelementptr inbounds i8, i8* %12, i64 %242
%244 = load i8, i8* %243
%245 = add i8 %244, -58
%246 = icmp ult i8 %245, -10
br i1 %246, label %267, label %247
247: ; preds = %241
%248 = zext i8 %244 to i32
%249 = mul nsw i32 %238, 10
%250 = add nsw i32 %249, -528
%251 = add nsw i32 %250, %248
%252 = icmp ugt i32 %251, 59
br i1 %252, label %267, label %253
253: ; preds = %247
%254 = mul nuw nsw i32 %251, 60
%255 = add nsw i32 %234, %254
%256 = icmp eq i32 %255, 0
%257 = select i1 %16, i1 true, i1 %256
br i1 %257, label %263, label %258
258: ; preds = %253
%259 = sub nsw i32 0, %255
%260 = select i1 %209, i32 %259, i32 %255
%261 = tail call i32 @OPENSSL_gmtime_adj(%struct.tm* %0, i32 0, i32 %260)
%262 = icmp eq i32 %261, 0
br i1 %262, label %267, label %263
263: ; preds = %258, %253, %201, %206
%264 = phi i32 [ %207, %206 ], [ %202, %201 ], [ %215, %253 ], [ %215, %258 ]
%265 = icmp eq i32 %264, %9
%266 = zext i1 %265 to i32
br label %267
267: ; preds = %15, %27, %32, %43, %49, %54, %66, %72, %77, %87, %93, %98, %108, %114, %119, %129, %135, %140, %153, %157, %162, %227, %221, %212, %233, %241, %247, %258, %208, %7, %183, %198, %201, %2, %263
%268 = phi i32 [ %266, %263 ], [ 0, %2 ], [ 0, %201 ], [ 0, %198 ], [ 0, %183 ], [ 0, %7 ], [ 0, %208 ], [ 0, %258 ], [ 0, %247 ], [ 0, %241 ], [ 0, %233 ], [ 0, %212 ], [ 0, %221 ], [ 0, %227 ], [ 0, %162 ], [ 0, %157 ], [ 0, %153 ], [ 0, %140 ], [ 0, %135 ], [ 0, %129 ], [ 0, %119 ], [ 0, %114 ], [ 0, %108 ], [ 0, %98 ], [ 0, %93 ], [ 0, %87 ], [ 0, %77 ], [ 0, %72 ], [ 0, %66 ], [ 0, %54 ], [ 0, %49 ], [ 0, %43 ], [ 0, %32 ], [ 0, %27 ], [ 0, %15 ]
ret i32 %268
}