#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_12__ TYPE_3__;
typedef struct TYPE_11__ TYPE_2__;
typedef struct TYPE_10__ TYPE_1__;

/* Type definitions */
struct TYPE_12__ {
  scalar_t__ type;
  int length;
  unsigned char const *data;
};
struct TYPE_11__ {
  scalar_t__ type;
  int length;
  unsigned char const *data;
};
struct TYPE_10__ {
  int length;
  unsigned char *data;
};
typedef int /*<<< orphan*/ BIO;
typedef TYPE_1__ ASN1_OCTET_STRING;
typedef int /*<<< orphan*/ ASN1_OBJECT;
typedef TYPE_2__ ASN1_INTEGER;
typedef TYPE_3__ ASN1_ENUMERATED;

/* Variables and functions */
int /*<<< orphan*/ ASN1_OBJECT_free(int /*<<< orphan*/ *);
int ASN1_get_object(unsigned char const **, long *, int *, int *, long);
scalar_t__ BIO_dump_indent(int /*<<< orphan*/ *, char const *, long, int);
scalar_t__ BIO_printf(int /*<<< orphan*/ *, char *, unsigned char const, ...);
int BIO_write(int /*<<< orphan*/ *, char const *, int);
int /*<<< orphan*/ M_ASN1_ENUMERATED_free(TYPE_3__ *);
int /*<<< orphan*/ M_ASN1_INTEGER_free(TYPE_2__ *);
int /*<<< orphan*/ M_ASN1_OCTET_STRING_free(TYPE_1__ *);
int V_ASN1_BMPSTRING;
int V_ASN1_BOOLEAN;
int V_ASN1_CONSTRUCTED;
int V_ASN1_ENUMERATED;
int V_ASN1_EOC;
int V_ASN1_GENERALIZEDTIME;
int V_ASN1_IA5STRING;
int V_ASN1_INTEGER;
scalar_t__ V_ASN1_NEG_ENUMERATED;
scalar_t__ V_ASN1_NEG_INTEGER;
int V_ASN1_NUMERICSTRING;
int V_ASN1_OBJECT;
int V_ASN1_OCTET_STRING;
int V_ASN1_PRINTABLESTRING;
int V_ASN1_T61STRING;
int V_ASN1_UTCTIME;
int V_ASN1_UTF8STRING;
int V_ASN1_VISIBLESTRING;
int /*<<< orphan*/ asn1_print_info(int /*<<< orphan*/ *, int, int, int, int);
int d2i_ASN1_BOOLEAN(int /*<<< orphan*/ *, unsigned char const **, long);
TYPE_3__ *d2i_ASN1_ENUMERATED(int /*<<< orphan*/ *, unsigned char const **,
                              long);
TYPE_2__ *d2i_ASN1_INTEGER(int /*<<< orphan*/ *, unsigned char const **, long);
int /*<<< orphan*/ *d2i_ASN1_OBJECT(int /*<<< orphan*/ **,
                                    unsigned char const **, long);
TYPE_1__ *d2i_ASN1_OCTET_STRING(int /*<<< orphan*/ *, unsigned char const **,
                                long);
int /*<<< orphan*/ i2a_ASN1_OBJECT(int /*<<< orphan*/ *, int /*<<< orphan*/ *);
int asn1_parse2(BIO *bp, const unsigned char **pp, long length, int offset,
                int depth, int indent, int dump) {
  const unsigned char *p, *ep, *tot, *op, *opp;
  long len;
  int tag, xclass, ret = 0;
  int nl, hl, j, r;
  ASN1_OBJECT *o = NULL;
  ASN1_OCTET_STRING *os = NULL;
  int dump_indent;
  dump_indent = 6;
  p = *pp;
  tot = p + length;
  op = p - 1;
  while ((p < tot) && (op < p)) {
    op = p;
    j = ASN1_get_object(&p, &len, &tag, &xclass, length);
    if (j & 0x80) {
      if (BIO_write(bp, "Error in encoding\n", 18) <= 0)
        goto end;
      ret = 0;
      goto end;
    }
    hl = (p - op);
    length -= hl;
    if (BIO_printf(bp, "%5ld:", (long)offset + (long)(op - *pp)) <= 0)
      goto end;
    if (j != (V_ASN1_CONSTRUCTED | 1)) {
      if (BIO_printf(bp, "d=%-2d hl=%ld l=%4ld ", depth, (long)hl, len) <= 0)
        goto end;
    } else {
      if (BIO_printf(bp, "d=%-2d hl=%ld l=inf  ", depth, (long)hl) <= 0)
        goto end;
    }
    if (!asn1_print_info(bp, tag, xclass, j, (indent) ? depth : 0))
      goto end;
    if (j & V_ASN1_CONSTRUCTED) {
      ep = p + len;
      if (BIO_write(bp, "\n", 1) <= 0)
        goto end;
      if (len > length) {
        BIO_printf(bp, "length is greater than %ld\n", length);
        ret = 0;
        goto end;
      }
      if ((j == 0x21) && (len == 0)) {
        for (;;) {
          r = asn1_parse2(bp, &p, (long)(tot - p), offset + (p - *pp),
                          depth + 1, indent, dump);
          if (r == 0) {
            ret = 0;
            goto end;
          }
          if ((r == 2) || (p >= tot))
            break;
        }
      } else
        while (p < ep) {
          r = asn1_parse2(bp, &p, (long)len, offset + (p - *pp), depth + 1,
                          indent, dump);
          if (r == 0) {
            ret = 0;
            goto end;
          }
        }
    } else if (xclass != 0) {
      p += len;
      if (BIO_write(bp, "\n", 1) <= 0)
        goto end;
    } else {
      nl = 0;
      if ((tag == V_ASN1_PRINTABLESTRING) || (tag == V_ASN1_T61STRING) ||
          (tag == V_ASN1_IA5STRING) || (tag == V_ASN1_VISIBLESTRING) ||
          (tag == V_ASN1_NUMERICSTRING) || (tag == V_ASN1_UTF8STRING) ||
          (tag == V_ASN1_UTCTIME) || (tag == V_ASN1_GENERALIZEDTIME)) {
        if (BIO_write(bp, ":", 1) <= 0)
          goto end;
        if ((len > 0) && BIO_write(bp, (const char *)p, (int)len) != (int)len)
          goto end;
      } else if (tag == V_ASN1_OBJECT) {
        opp = op;
        if (d2i_ASN1_OBJECT(&o, &opp, len + hl) != NULL) {
          if (BIO_write(bp, ":", 1) <= 0)
            goto end;
          i2a_ASN1_OBJECT(bp, o);
        } else {
          if (BIO_write(bp, ":BAD OBJECT", 11) <= 0)
            goto end;
        }
      } else if (tag == V_ASN1_BOOLEAN) {
        int ii;
        opp = op;
        ii = d2i_ASN1_BOOLEAN(NULL, &opp, len + hl);
        if (ii < 0) {
          if (BIO_write(bp, "Bad boolean\n", 12) <= 0)
            goto end;
        }
        BIO_printf(bp, ":%d", ii);
      } else if (tag == V_ASN1_BMPSTRING) {
      } else if (tag == V_ASN1_OCTET_STRING) {
        int i, printable = 1;
        opp = op;
        os = d2i_ASN1_OCTET_STRING(NULL, &opp, len + hl);
        if (os != NULL && os->length > 0) {
          opp = os->data;
          for (i = 0; i < os->length; i++) {
            if (((opp[i] < ' ') && (opp[i] != '\n') && (opp[i] != '\r') &&
                 (opp[i] != '\t')) ||
                (opp[i] > '~')) {
              printable = 0;
              break;
            }
          }
          if (printable) {
            if (BIO_write(bp, ":", 1) <= 0)
              goto end;
            if (BIO_write(bp, (const char *)opp, os->length) <= 0)
              goto end;
          } else if (!dump) {
            if (BIO_write(bp, "[HEX DUMP]:", 11) <= 0)
              goto end;
            for (i = 0; i < os->length; i++) {
              if (BIO_printf(bp, "%02X", opp[i]) <= 0)
                goto end;
            }
          } else {
            if (!nl) {
              if (BIO_write(bp, "\n", 1) <= 0)
                goto end;
            }
            if (BIO_dump_indent(
                    bp, (const char *)opp,
                    ((dump == -1 || dump > os->length) ? os->length : dump),
                    dump_indent) <= 0)
              goto end;
            nl = 1;
          }
        }
        if (os != NULL) {
          M_ASN1_OCTET_STRING_free(os);
          os = NULL;
        }
      } else if (tag == V_ASN1_INTEGER) {
        ASN1_INTEGER *bs;
        int i;
        opp = op;
        bs = d2i_ASN1_INTEGER(NULL, &opp, len + hl);
        if (bs != NULL) {
          if (BIO_write(bp, ":", 1) <= 0)
            goto end;
          if (bs->type == V_ASN1_NEG_INTEGER)
            if (BIO_write(bp, "-", 1) <= 0)
              goto end;
          for (i = 0; i < bs->length; i++) {
            if (BIO_printf(bp, "%02X", bs->data[i]) <= 0)
              goto end;
          }
          if (bs->length == 0) {
            if (BIO_write(bp, "00", 2) <= 0)
              goto end;
          }
        } else {
          if (BIO_write(bp, "BAD INTEGER", 11) <= 0)
            goto end;
        }
        M_ASN1_INTEGER_free(bs);
      } else if (tag == V_ASN1_ENUMERATED) {
        ASN1_ENUMERATED *bs;
        int i;
        opp = op;
        bs = d2i_ASN1_ENUMERATED(NULL, &opp, len + hl);
        if (bs != NULL) {
          if (BIO_write(bp, ":", 1) <= 0)
            goto end;
          if (bs->type == V_ASN1_NEG_ENUMERATED)
            if (BIO_write(bp, "-", 1) <= 0)
              goto end;
          for (i = 0; i < bs->length; i++) {
            if (BIO_printf(bp, "%02X", bs->data[i]) <= 0)
              goto end;
          }
          if (bs->length == 0) {
            if (BIO_write(bp, "00", 2) <= 0)
              goto end;
          }
        } else {
          if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0)
            goto end;
        }
        M_ASN1_ENUMERATED_free(bs);
      } else if (len > 0 && dump) {
        if (!nl) {
          if (BIO_write(bp, "\n", 1) <= 0)
            goto end;
        }
        if (BIO_dump_indent(bp, (const char *)p,
                            ((dump == -1 || dump > len) ? len : dump),
                            dump_indent) <= 0)
          goto end;
        nl = 1;
      }
      if (!nl) {
        if (BIO_write(bp, "\n", 1) <= 0)
          goto end;
      }
      p += len;
      if ((tag == V_ASN1_EOC) && (xclass == 0)) {
        ret = 2;
        goto end;
      }
    }
    length -= len;
  }
  ret = 1;
end:
  if (o != NULL)
    ASN1_OBJECT_free(o);
  if (os != NULL)
    M_ASN1_OCTET_STRING_free(os);
  *pp = p;
  return (ret);
}


x86 assembly (clang, -O0):
<asn1_parse2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x0,-0x64(%rbp)
movq   $0x0,-0x80(%rbp)
movq   $0x0,-0x88(%rbp)
movl   $0x6,-0x8c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x48(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x40(%rbp),%rcx
mov    %al,-0xb5(%rbp)
jae    1293 <asn1_parse2+0x93>
mov    -0x48(%rbp),%rax
cmp    -0x30(%rbp),%rax
setb   %al
mov    %al,-0xb5(%rbp)
mov    -0xb5(%rbp),%al
test   $0x1,%al
jne    12a6 <asn1_parse2+0xa6>
jmp    1ff0 <asn1_parse2+0xdf0>
mov    -0x30(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%r8
lea    -0x30(%rbp),%rdi
lea    -0x58(%rbp),%rsi
lea    -0x5c(%rbp),%rdx
lea    -0x60(%rbp),%rcx
call   10b0 <ASN1_get_object@plt>
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     130a <asn1_parse2+0x10a>
mov    -0x8(%rbp),%rdi
lea    0x1d1a(%rip),%rsi
mov    $0x12,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     12fe <asn1_parse2+0xfe>
jmp    1ff7 <asn1_parse2+0xdf7>
movl   $0x0,-0x64(%rbp)
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x6c(%rbp)
movslq -0x6c(%rbp),%rcx
mov    -0x18(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x1c(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rdx
mov    (%rdx),%rdx
sub    %rdx,%rcx
add    %rcx,%rax
lea    0x1ccc(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1360 <asn1_parse2+0x160>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0x70(%rbp),%eax
mov    0x3c06(%rip),%rcx
mov    (%rcx),%ecx
or     $0x1,%ecx
cmp    %ecx,%eax
je     13ab <asn1_parse2+0x1ab>
mov    -0x8(%rbp),%rdi
mov    -0x20(%rbp),%eax
movslq -0x6c(%rbp),%rcx
mov    -0x58(%rbp),%r8
lea    0x1c8c(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     13a6 <asn1_parse2+0x1a6>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    13db <asn1_parse2+0x1db>
mov    -0x8(%rbp),%rdi
mov    -0x20(%rbp),%eax
movslq -0x6c(%rbp),%rcx
lea    0x1c72(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     13d6 <asn1_parse2+0x1d6>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    13db <asn1_parse2+0x1db>
mov    -0x8(%rbp),%rax
mov    %rax,-0xd0(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0xc4(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0xc0(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0xbc(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     1419 <asn1_parse2+0x219>
mov    -0x20(%rbp),%eax
mov    %eax,-0xd4(%rbp)
jmp    1426 <asn1_parse2+0x226>
xor    %eax,%eax
mov    %eax,-0xd4(%rbp)
jmp    1426 <asn1_parse2+0x226>
mov    -0xbc(%rbp),%ecx
mov    -0xc0(%rbp),%edx
mov    -0xc4(%rbp),%esi
mov    -0xd0(%rbp),%rdi
mov    -0xd4(%rbp),%r8d
call   1110 <asn1_print_info@plt>
cmp    $0x0,%eax
jne    1459 <asn1_parse2+0x259>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0x70(%rbp),%eax
mov    0x3b0d(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     15e0 <asn1_parse2+0x3e0>
mov    -0x30(%rbp),%rax
add    -0x58(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rdi
lea    0x1bda(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     149d <asn1_parse2+0x29d>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0x58(%rbp),%rax
cmp    -0x18(%rbp),%rax
jle    14d0 <asn1_parse2+0x2d0>
mov    -0x8(%rbp),%rdi
mov    -0x18(%rbp),%rax
lea    0x1b8b(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
movl   $0x0,-0x64(%rbp)
jmp    1ff7 <asn1_parse2+0xdf7>
cmpl   $0x21,-0x70(%rbp)
jne    156b <asn1_parse2+0x36b>
cmpq   $0x0,-0x58(%rbp)
jne    156b <asn1_parse2+0x36b>
jmp    14ea <asn1_parse2+0x2ea>
mov    -0x8(%rbp),%rdi
mov    -0x40(%rbp),%rdx
mov    -0x30(%rbp),%rax
sub    %rax,%rdx
movslq -0x1c(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rsi
mov    (%rsi),%rsi
sub    %rsi,%rcx
add    %rcx,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%r8d
add    $0x1,%r8d
mov    -0x24(%rbp),%r9d
mov    0x10(%rbp),%eax
lea    -0x30(%rbp),%rsi
mov    %eax,(%rsp)
call   1070 <asn1_parse2@plt>
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jne    1544 <asn1_parse2+0x344>
movl   $0x0,-0x64(%rbp)
jmp    1ff7 <asn1_parse2+0xdf7>
cmpl   $0x2,-0x74(%rbp)
je     155c <asn1_parse2+0x35c>
mov    -0x30(%rbp),%rax
cmp    -0x40(%rbp),%rax
jb     1561 <asn1_parse2+0x361>
jmp    1566 <asn1_parse2+0x366>
jmp    14ea <asn1_parse2+0x2ea>
jmp    15db <asn1_parse2+0x3db>
jmp    1570 <asn1_parse2+0x370>
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    15d6 <asn1_parse2+0x3d6>
mov    -0x8(%rbp),%rdi
mov    -0x58(%rbp),%rdx
movslq -0x1c(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rsi
mov    (%rsi),%rsi
sub    %rsi,%rcx
add    %rcx,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%r8d
add    $0x1,%r8d
mov    -0x24(%rbp),%r9d
mov    0x10(%rbp),%eax
lea    -0x30(%rbp),%rsi
mov    %eax,(%rsp)
call   1070 <asn1_parse2@plt>
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jne    15d1 <asn1_parse2+0x3d1>
movl   $0x0,-0x64(%rbp)
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1570 <asn1_parse2+0x370>
jmp    15db <asn1_parse2+0x3db>
jmp    1fdc <asn1_parse2+0xddc>
cmpl   $0x0,-0x60(%rbp)
je     161e <asn1_parse2+0x41e>
mov    -0x58(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
lea    0x1a5e(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1619 <asn1_parse2+0x419>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1fd7 <asn1_parse2+0xdd7>
movl   $0x0,-0x68(%rbp)
mov    -0x5c(%rbp),%eax
mov    0x3951(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x3957(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x3935(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x396b(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x3971(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x3937(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x38c5(%rip),%rcx
cmp    (%rcx),%eax
je     16b5 <asn1_parse2+0x4b5>
mov    -0x5c(%rbp),%eax
mov    0x390b(%rip),%rcx
cmp    (%rcx),%eax
jne    170c <asn1_parse2+0x50c>
mov    -0x8(%rbp),%rdi
lea    0x19c8(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     16d8 <asn1_parse2+0x4d8>
jmp    1ff7 <asn1_parse2+0xdf7>
cmpq   $0x0,-0x58(%rbp)
jle    1707 <asn1_parse2+0x507>
mov    -0x8(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x58(%rbp),%rax
mov    %eax,%edx
call   1120 <BIO_write@plt>
mov    -0x58(%rbp),%rcx
cmp    %ecx,%eax
je     1707 <asn1_parse2+0x507>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1f6c <asn1_parse2+0xd6c>
mov    -0x5c(%rbp),%eax
mov    0x38b2(%rip),%rcx
cmp    (%rcx),%eax
jne    17aa <asn1_parse2+0x5aa>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
lea    -0x80(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1080 <d2i_ASN1_OBJECT@plt>
cmp    $0x0,%rax
je     177d <asn1_parse2+0x57d>
mov    -0x8(%rbp),%rdi
lea    0x1935(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     176b <asn1_parse2+0x56b>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0x8(%rbp),%rdi
mov    -0x80(%rbp),%rsi
call   1030 <i2a_ASN1_OBJECT@plt>
jmp    17a5 <asn1_parse2+0x5a5>
mov    -0x8(%rbp),%rdi
lea    0x18d9(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     17a0 <asn1_parse2+0x5a0>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    17a5 <asn1_parse2+0x5a5>
jmp    1f67 <asn1_parse2+0xd67>
mov    -0x5c(%rbp),%eax
mov    0x37dc(%rip),%rcx
cmp    (%rcx),%eax
jne    1837 <asn1_parse2+0x637>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   1100 <d2i_ASN1_BOOLEAN@plt>
mov    %eax,-0x90(%rbp)
cmpl   $0x0,-0x90(%rbp)
jge    1817 <asn1_parse2+0x617>
mov    -0x8(%rbp),%rdi
lea    0x1873(%rip),%rsi
mov    $0xc,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1812 <asn1_parse2+0x612>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1817 <asn1_parse2+0x617>
mov    -0x8(%rbp),%rdi
mov    -0x90(%rbp),%eax
lea    0x1852(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
jmp    1f62 <asn1_parse2+0xd62>
mov    -0x5c(%rbp),%eax
mov    0x3717(%rip),%rcx
cmp    (%rcx),%eax
jne    184e <asn1_parse2+0x64e>
jmp    1f5d <asn1_parse2+0xd5d>
mov    -0x5c(%rbp),%eax
mov    0x3710(%rip),%rcx
cmp    (%rcx),%eax
jne    1b5d <asn1_parse2+0x95d>
movl   $0x1,-0x98(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   1050 <d2i_ASN1_OCTET_STRING@plt>
mov    %rax,-0x88(%rbp)
cmpq   $0x0,-0x88(%rbp)
je     1b33 <asn1_parse2+0x933>
mov    -0x88(%rbp),%rax
cmpl   $0x0,(%rax)
jle    1b33 <asn1_parse2+0x933>
mov    -0x88(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x50(%rbp)
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x88(%rbp),%rcx
cmp    (%rcx),%eax
jge    197d <asn1_parse2+0x77d>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jge    193d <asn1_parse2+0x73d>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     193d <asn1_parse2+0x73d>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
je     193d <asn1_parse2+0x73d>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
jne    1955 <asn1_parse2+0x755>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7e,%eax
jle    1964 <asn1_parse2+0x764>
movl   $0x0,-0x98(%rbp)
jmp    197d <asn1_parse2+0x77d>
jmp    1969 <asn1_parse2+0x769>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    18c8 <asn1_parse2+0x6c8>
cmpl   $0x0,-0x98(%rbp)
je     19d6 <asn1_parse2+0x7d6>
mov    -0x8(%rbp),%rdi
lea    0x16f3(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     19ad <asn1_parse2+0x7ad>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0x8(%rbp),%rdi
mov    -0x50(%rbp),%rsi
mov    -0x88(%rbp),%rax
mov    (%rax),%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     19d1 <asn1_parse2+0x7d1>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1b2e <asn1_parse2+0x92e>
cmpl   $0x0,0x10(%rbp)
jne    1a70 <asn1_parse2+0x870>
mov    -0x8(%rbp),%rdi
lea    0x1693(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1a03 <asn1_parse2+0x803>
jmp    1ff7 <asn1_parse2+0xdf7>
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x88(%rbp),%rcx
cmp    (%rcx),%eax
jge    1a6b <asn1_parse2+0x86b>
mov    -0x8(%rbp),%rdi
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
lea    0x1652(%rip),%rsi
movzbl (%rax,%rcx,1),%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1a52 <asn1_parse2+0x852>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1a57 <asn1_parse2+0x857>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1a0d <asn1_parse2+0x80d>
jmp    1b29 <asn1_parse2+0x929>
cmpl   $0x0,-0x68(%rbp)
jne    1aa2 <asn1_parse2+0x8a2>
mov    -0x8(%rbp),%rdi
lea    0x15da(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1a9d <asn1_parse2+0x89d>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1aa2 <asn1_parse2+0x8a2>
mov    -0x8(%rbp),%rax
mov    %rax,-0xe8(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0xe0(%rbp)
cmpl   $0xffffffff,0x10(%rbp)
je     1ad4 <asn1_parse2+0x8d4>
mov    0x10(%rbp),%eax
mov    -0x88(%rbp),%rcx
cmp    (%rcx),%eax
jle    1ae8 <asn1_parse2+0x8e8>
mov    -0x88(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xec(%rbp)
jmp    1af1 <asn1_parse2+0x8f1>
mov    0x10(%rbp),%eax
mov    %eax,-0xec(%rbp)
mov    -0xe0(%rbp),%rsi
mov    -0xe8(%rbp),%rdi
mov    -0xec(%rbp),%eax
movslq %eax,%rdx
mov    -0x8c(%rbp),%ecx
call   10d0 <BIO_dump_indent@plt>
cmp    $0x0,%rax
jg     1b22 <asn1_parse2+0x922>
jmp    1ff7 <asn1_parse2+0xdf7>
movl   $0x1,-0x68(%rbp)
jmp    1b2e <asn1_parse2+0x92e>
jmp    1b33 <asn1_parse2+0x933>
cmpq   $0x0,-0x88(%rbp)
je     1b58 <asn1_parse2+0x958>
mov    -0x88(%rbp),%rdi
call   1040 <M_ASN1_OCTET_STRING_free@plt>
movq   $0x0,-0x88(%rbp)
jmp    1f58 <asn1_parse2+0xd58>
mov    -0x5c(%rbp),%eax
mov    0x3449(%rip),%rcx
cmp    (%rcx),%eax
jne    1cf0 <asn1_parse2+0xaf0>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   10a0 <d2i_ASN1_INTEGER@plt>
mov    %rax,-0xa0(%rbp)
cmpq   $0x0,-0xa0(%rbp)
je     1cb7 <asn1_parse2+0xab7>
mov    -0x8(%rbp),%rdi
lea    0x14d9(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1bc7 <asn1_parse2+0x9c7>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0xa0(%rbp),%rax
mov    (%rax),%rax
mov    0x33a0(%rip),%rcx
cmp    (%rcx),%rax
jne    1c09 <asn1_parse2+0xa09>
mov    -0x8(%rbp),%rdi
lea    0x14a3(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1c04 <asn1_parse2+0xa04>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1c09 <asn1_parse2+0xa09>
movl   $0x0,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
mov    -0xa0(%rbp),%rcx
cmp    0x8(%rcx),%eax
jge    1c79 <asn1_parse2+0xa79>
mov    -0x8(%rbp),%rdi
mov    -0xa0(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0xa4(%rbp),%rcx
lea    0x1444(%rip),%rsi
movzbl (%rax,%rcx,1),%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1c60 <asn1_parse2+0xa60>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1c65 <asn1_parse2+0xa65>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1c13 <asn1_parse2+0xa13>
mov    -0xa0(%rbp),%rax
cmpl   $0x0,0x8(%rax)
jne    1cb2 <asn1_parse2+0xab2>
mov    -0x8(%rbp),%rdi
lea    0x13fc(%rip),%rsi
mov    $0x2,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1cad <asn1_parse2+0xaad>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1cb2 <asn1_parse2+0xab2>
jmp    1cdf <asn1_parse2+0xadf>
mov    -0x8(%rbp),%rdi
lea    0x13d2(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1cda <asn1_parse2+0xada>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1cdf <asn1_parse2+0xadf>
mov    -0xa0(%rbp),%rdi
call   10c0 <M_ASN1_INTEGER_free@plt>
jmp    1f53 <asn1_parse2+0xd53>
mov    -0x5c(%rbp),%eax
mov    0x32a6(%rip),%rcx
cmp    (%rcx),%eax
jne    1e83 <asn1_parse2+0xc83>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   1090 <d2i_ASN1_ENUMERATED@plt>
mov    %rax,-0xb0(%rbp)
cmpq   $0x0,-0xb0(%rbp)
je     1e4a <asn1_parse2+0xc4a>
mov    -0x8(%rbp),%rdi
lea    0x1346(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1d5a <asn1_parse2+0xb5a>
jmp    1ff7 <asn1_parse2+0xdf7>
mov    -0xb0(%rbp),%rax
mov    (%rax),%rax
mov    0x326d(%rip),%rcx
cmp    (%rcx),%rax
jne    1d9c <asn1_parse2+0xb9c>
mov    -0x8(%rbp),%rdi
lea    0x1310(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1d97 <asn1_parse2+0xb97>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1d9c <asn1_parse2+0xb9c>
movl   $0x0,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
mov    -0xb0(%rbp),%rcx
cmp    0x8(%rcx),%eax
jge    1e0c <asn1_parse2+0xc0c>
mov    -0x8(%rbp),%rdi
mov    -0xb0(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0xb4(%rbp),%rcx
lea    0x12b1(%rip),%rsi
movzbl (%rax,%rcx,1),%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1df3 <asn1_parse2+0xbf3>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1df8 <asn1_parse2+0xbf8>
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    1da6 <asn1_parse2+0xba6>
mov    -0xb0(%rbp),%rax
cmpl   $0x0,0x8(%rax)
jne    1e45 <asn1_parse2+0xc45>
mov    -0x8(%rbp),%rdi
lea    0x1269(%rip),%rsi
mov    $0x2,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1e40 <asn1_parse2+0xc40>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1e45 <asn1_parse2+0xc45>
jmp    1e72 <asn1_parse2+0xc72>
mov    -0x8(%rbp),%rdi
lea    0x124b(%rip),%rsi
mov    $0xe,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1e6d <asn1_parse2+0xc6d>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1e72 <asn1_parse2+0xc72>
mov    -0xb0(%rbp),%rdi
call   10e0 <M_ASN1_ENUMERATED_free@plt>
jmp    1f4e <asn1_parse2+0xd4e>
cmpq   $0x0,-0x58(%rbp)
jle    1f49 <asn1_parse2+0xd49>
cmpl   $0x0,0x10(%rbp)
je     1f49 <asn1_parse2+0xd49>
cmpl   $0x0,-0x68(%rbp)
jne    1eca <asn1_parse2+0xcca>
mov    -0x8(%rbp),%rdi
lea    0x11b2(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1ec5 <asn1_parse2+0xcc5>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1eca <asn1_parse2+0xcca>
mov    -0x8(%rbp),%rax
mov    %rax,-0x100(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0xf8(%rbp)
cmpl   $0xffffffff,0x10(%rbp)
je     1ef8 <asn1_parse2+0xcf8>
movslq 0x10(%rbp),%rax
cmp    -0x58(%rbp),%rax
jle    1f08 <asn1_parse2+0xd08>
mov    -0x58(%rbp),%rax
mov    %rax,-0x108(%rbp)
jmp    1f13 <asn1_parse2+0xd13>
movslq 0x10(%rbp),%rax
mov    %rax,-0x108(%rbp)
mov    -0xf8(%rbp),%rsi
mov    -0x100(%rbp),%rdi
mov    -0x108(%rbp),%rdx
mov    -0x8c(%rbp),%ecx
call   10d0 <BIO_dump_indent@plt>
cmp    $0x0,%rax
jg     1f42 <asn1_parse2+0xd42>
jmp    1ff7 <asn1_parse2+0xdf7>
movl   $0x1,-0x68(%rbp)
jmp    1f4e <asn1_parse2+0xd4e>
jmp    1f53 <asn1_parse2+0xd53>
jmp    1f58 <asn1_parse2+0xd58>
jmp    1f5d <asn1_parse2+0xd5d>
jmp    1f62 <asn1_parse2+0xd62>
jmp    1f67 <asn1_parse2+0xd67>
jmp    1f6c <asn1_parse2+0xd6c>
cmpl   $0x0,-0x68(%rbp)
jne    1f9e <asn1_parse2+0xd9e>
mov    -0x8(%rbp),%rdi
lea    0x10de(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%eax
jg     1f99 <asn1_parse2+0xd99>
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1f9e <asn1_parse2+0xd9e>
mov    -0x58(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x5c(%rbp),%eax
mov    0x3044(%rip),%rcx
cmp    (%rcx),%eax
jne    1fd2 <asn1_parse2+0xdd2>
cmpl   $0x0,-0x60(%rbp)
jne    1fd2 <asn1_parse2+0xdd2>
movl   $0x2,-0x64(%rbp)
jmp    1ff7 <asn1_parse2+0xdf7>
jmp    1fd7 <asn1_parse2+0xdd7>
jmp    1fdc <asn1_parse2+0xddc>
mov    -0x58(%rbp),%rcx
mov    -0x18(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x18(%rbp)
jmp    126c <asn1_parse2+0x6c>
movl   $0x1,-0x64(%rbp)
cmpq   $0x0,-0x80(%rbp)
je     200b <asn1_parse2+0xe0b>
mov    -0x80(%rbp),%rdi
call   10f0 <ASN1_OBJECT_free@plt>
cmpq   $0x0,-0x88(%rbp)
je     2025 <asn1_parse2+0xe25>
mov    -0x88(%rbp),%rdi
call   1040 <M_ASN1_OCTET_STRING_free@plt>
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x64(%rbp),%eax
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<asn1_parse2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %rsi,%r12
movq   $0x0,0x60(%rsp)
mov    (%rsi),%rax
mov    %rax,0x20(%rsp)
test   %rdx,%rdx
jle    1b60 <asn1_parse2+0x960>
mov    %rdx,%r14
mov    %rdi,%r10
mov    %rax,0x40(%rsp)
add    %rdx,%rax
mov    %rax,0x58(%rsp)
mov    %ecx,0x48(%rsp)
mov    %ecx,%eax
mov    %rax,0x80(%rsp)
test   %r9d,%r9d
mov    %r8d,%eax
cmove  %r9d,%eax
mov    %eax,0x70(%rsp)
mov    %r8d,0x74(%rsp)
add    $0x1,%r8d
mov    %r8d,0x4c(%rsp)
movslq 0xc0(%rsp),%rax
mov    %rax,0x78(%rsp)
lea    0x20(%rsp),%rdi
lea    0x18(%rsp),%rsi
lea    0x3c(%rsp),%rdx
lea    0x38(%rsp),%rcx
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    %r9d,0x6c(%rsp)
mov    %r10,0x30(%rsp)
mov    %r14,%r8
call   10b0 <ASN1_get_object@plt>
mov    %eax,%r13d
test   $0x80,%r13b
jne    1bc3 <asn1_parse2+0x9c3>
mov    0x20(%rsp),%ebp
mov    0x40(%rsp),%rbx
mov    0x80(%rsp),%rax
add    %ebx,%eax
sub    (%r12),%eax
movzbl %al,%edx
xor    %r15d,%r15d
mov    0x30(%rsp),%rdi
lea    0xd38(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b74 <asn1_parse2+0x974>
mov    %r14,0x50(%rsp)
sub    %ebx,%ebp
movslq %ebp,%r14
mov    0x2c74(%rip),%rax
mov    (%rax),%eax
or     $0x1,%eax
movzbl 0x74(%rsp),%edx
cmp    %eax,%r13d
jne    1340 <asn1_parse2+0x140>
xor    %r15d,%r15d
mov    0x30(%rsp),%rbp
mov    %rbp,%rdi
lea    0xd12(%rip),%rsi
mov    %r14,%rcx
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jg     136a <asn1_parse2+0x16a>
jmp    1b74 <asn1_parse2+0x974>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x18(%rsp),%r8
xor    %r15d,%r15d
mov    0x30(%rsp),%rbp
mov    %rbp,%rdi
lea    0xcc2(%rip),%rsi
mov    %r14,%rcx
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b74 <asn1_parse2+0x974>
mov    0x3c(%rsp),%esi
mov    0x38(%rsp),%edx
mov    %rbp,%rdi
mov    %r13d,%ecx
mov    0x70(%rsp),%r8d
call   1110 <asn1_print_info@plt>
xor    %r15d,%r15d
test   %eax,%eax
je     1b74 <asn1_parse2+0x974>
sub    %r14,0x50(%rsp)
mov    0x2bd7(%rip),%rax
test   %r13d,(%rax)
je     14d0 <asn1_parse2+0x2d0>
mov    0x20(%rsp),%r15
add    0x18(%rsp),%r15
mov    0x30(%rsp),%rdi
lea    0xca7(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    0x18(%rsp),%rax
mov    0x50(%rsp),%rcx
cmp    %rcx,%rax
jg     1be5 <asn1_parse2+0x9e5>
mov    %rcx,0x50(%rsp)
mov    %r12,%r14
cmp    $0x21,%r13d
mov    0x6c(%rsp),%r9d
mov    0x30(%rsp),%r10
mov    0x48(%rsp),%ebx
lea    0x20(%rsp),%rbp
mov    %r9d,%r13d
mov    %r10,%r12
jne    14b2 <asn1_parse2+0x2b2>
test   %rax,%rax
jne    14b2 <asn1_parse2+0x2b2>
mov    0x20(%rsp),%rcx
cs nopw 0x0(%rax,%rax,1)
mov    0x58(%rsp),%rdx
sub    %rcx,%rdx
sub    (%r14),%ecx
add    %ebx,%ecx
mov    0xc0(%rsp),%eax
mov    %eax,(%rsp)
mov    %r10,%rdi
mov    %rbp,%rsi
mov    0x4c(%rsp),%r8d
call   1070 <asn1_parse2@plt>
mov    %eax,%r15d
test   %eax,%eax
je     1b7d <asn1_parse2+0x97d>
cmp    $0x2,%r15d
mov    0x48(%rsp),%ebx
lea    0x20(%rsp),%rbp
je     1800 <asn1_parse2+0x600>
mov    %r13d,%r9d
mov    %r12,%r10
mov    0x20(%rsp),%rcx
cmp    0x58(%rsp),%rcx
jb     1420 <asn1_parse2+0x220>
jmp    1800 <asn1_parse2+0x600>
nopl   0x0(%rax)
mov    0x18(%rsp),%rdx
sub    (%r14),%ecx
add    %ebx,%ecx
mov    0xc0(%rsp),%eax
mov    %eax,(%rsp)
mov    %r10,%rdi
mov    %rbp,%rsi
mov    0x4c(%rsp),%r8d
mov    %r13d,%r9d
call   1070 <asn1_parse2@plt>
mov    %r12,%r10
test   %eax,%eax
je     1b68 <asn1_parse2+0x968>
mov    0x20(%rsp),%rcx
cmp    %r15,%rcx
jb     1480 <asn1_parse2+0x280>
jmp    1800 <asn1_parse2+0x600>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmpl   $0x0,0x38(%rsp)
je     1507 <asn1_parse2+0x307>
mov    0x18(%rsp),%rax
add    %rax,0x20(%rsp)
mov    0x30(%rsp),%rdi
lea    0xb72(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
mov    %r12,%r14
jg     1800 <asn1_parse2+0x600>
jmp    1b68 <asn1_parse2+0x968>
mov    0x3c(%rsp),%eax
mov    0x2a6e(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a77(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a58(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a91(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a9a(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a63(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x29f4(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a41(%rip),%rcx
cmp    (%rcx),%eax
je     15ea <asn1_parse2+0x3ea>
mov    0x2a46(%rip),%rcx
cmp    (%rcx),%eax
mov    0x30(%rsp),%rdi
mov    %rdi,%r13
jne    1638 <asn1_parse2+0x438>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
lea    0x60(%rsp),%rdi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1080 <d2i_ASN1_OBJECT@plt>
mov    %r13,%rdi
test   %rax,%rax
je     1799 <asn1_parse2+0x599>
lea    0xac2(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    0x60(%rsp),%rsi
mov    %r13,%rdi
call   1030 <i2a_ASN1_OBJECT@plt>
jmp    1699 <asn1_parse2+0x499>
mov    0x30(%rsp),%rdi
mov    %rdi,%rbp
lea    0xa8f(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    0x18(%rsp),%rdx
test   %rdx,%rdx
mov    %rbp,%rdi
jle    17b5 <asn1_parse2+0x5b5>
mov    0x20(%rsp),%rsi
call   1120 <BIO_write@plt>
mov    %rbp,%rdi
cmp    0x18(%rsp),%eax
je     17b5 <asn1_parse2+0x5b5>
jmp    1bd9 <asn1_parse2+0x9d9>
mov    0x2951(%rip),%rcx
cmp    (%rcx),%eax
jne    16a1 <asn1_parse2+0x4a1>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1100 <d2i_ASN1_BOOLEAN@plt>
mov    %eax,%r14d
test   %eax,%eax
jns    1684 <asn1_parse2+0x484>
mov    %r13,%rdi
lea    0x9fb(%rip),%rsi
mov    $0xc,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
movzbl %r14b,%edx
mov    %r13,%rdi
lea    0x9e8(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
mov    %r13,%rdi
jmp    17b5 <asn1_parse2+0x5b5>
mov    0x28b0(%rip),%rcx
cmp    (%rcx),%eax
je     17b5 <asn1_parse2+0x5b5>
mov    0x28b1(%rip),%rcx
cmp    (%rcx),%eax
jne    184f <asn1_parse2+0x64f>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1050 <d2i_ASN1_OCTET_STRING@plt>
mov    %r13,%rdi
test   %rax,%rax
je     17b5 <asn1_parse2+0x5b5>
mov    %rax,%r14
mov    (%rax),%esi
test   %esi,%esi
jle    1aac <asn1_parse2+0x8ac>
mov    0x8(%r14),%rcx
mov    %rcx,0x28(%rsp)
xor    %edx,%edx
mov    $0x2600,%ebp
jmp    1719 <asn1_parse2+0x519>
cmp    $0x7e,%al
ja     172e <asn1_parse2+0x52e>
add    $0x1,%rdx
cmp    %rdx,%rsi
je     1a78 <asn1_parse2+0x878>
movzbl (%rcx,%rdx,1),%eax
cmp    $0x1f,%al
ja     1708 <asn1_parse2+0x508>
cmp    $0xd,%al
ja     172e <asn1_parse2+0x52e>
movzbl %al,%eax
bt     %rax,%rbp
jb     170c <asn1_parse2+0x50c>
cmpl   $0x0,0xc0(%rsp)
je     1b05 <asn1_parse2+0x905>
lea    0x91c(%rip),%rsi
mov    $0x1,%edx
mov    %rdi,%rbp
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1c12 <asn1_parse2+0xa12>
movslq (%r14),%rax
mov    0xc0(%rsp),%ecx
cmp    %ecx,%eax
mov    0x78(%rsp),%rdx
cmovl  %rax,%rdx
cmp    $0xffffffff,%ecx
mov    0x28(%rsp),%rsi
cmove  %rax,%rdx
mov    %rbp,%rdi
mov    $0x6,%ecx
call   10d0 <BIO_dump_indent@plt>
test   %rax,%rax
jle    1c12 <asn1_parse2+0xa12>
mov    %r14,%rdi
call   1040 <M_ASN1_OCTET_STRING_free@plt>
jmp    17ce <asn1_parse2+0x5ce>
lea    0x8c1(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
mov    %r13,%rdi
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
lea    0x8a3(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    %r12,%r14
mov    0x18(%rsp),%rax
add    %rax,0x20(%rsp)
mov    0x3c(%rsp),%eax
mov    0x2812(%rip),%rcx
cmp    (%rcx),%eax
jne    1800 <asn1_parse2+0x600>
cmpl   $0x0,0x38(%rsp)
je     1c07 <asn1_parse2+0xa07>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x20(%rsp),%rax
mov    $0x1,%r15d
cmp    0x58(%rsp),%rax
jae    1b84 <asn1_parse2+0x984>
mov    0x50(%rsp),%rbp
sub    0x18(%rsp),%rbp
cmp    %rax,0x40(%rsp)
mov    %rax,0x40(%rsp)
lea    0x20(%rsp),%rdi
lea    0x18(%rsp),%rsi
lea    0x3c(%rsp),%rdx
lea    0x38(%rsp),%rcx
mov    %r14,%r12
mov    %rbp,%r14
jb     129d <asn1_parse2+0x9d>
jmp    1b87 <asn1_parse2+0x987>
mov    0x275a(%rip),%rcx
cmp    (%rcx),%eax
jne    192a <asn1_parse2+0x72a>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   10a0 <d2i_ASN1_INTEGER@plt>
mov    %rax,%r14
mov    %r13,%rdi
test   %rax,%rax
je     1ab9 <asn1_parse2+0x8b9>
lea    0x7f6(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    (%r14),%rax
mov    0x26ca(%rip),%rcx
cmp    (%rcx),%rax
jne    18cf <asn1_parse2+0x6cf>
mov    %r13,%rdi
lea    0x7d2(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    0x8(%r14),%eax
test   %eax,%eax
jle    190e <asn1_parse2+0x70e>
mov    %r13,%rdi
xor    %ebp,%ebp
mov    0x10(%r14),%rax
movzbl (%rax,%rbp,1),%edx
xor    %r15d,%r15d
lea    0x79c(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b74 <asn1_parse2+0x974>
add    $0x1,%rbp
movslq 0x8(%r14),%rax
cmp    %rax,%rbp
mov    %r13,%rdi
jl     18dc <asn1_parse2+0x6dc>
test   %eax,%eax
jne    1ad2 <asn1_parse2+0x8d2>
mov    %r13,%rdi
lea    0x771(%rip),%rsi
mov    $0x2,%edx
jmp    1ac5 <asn1_parse2+0x8c5>
mov    0x266f(%rip),%rcx
cmp    (%rcx),%eax
jne    1a05 <asn1_parse2+0x805>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1090 <d2i_ASN1_ENUMERATED@plt>
mov    %rax,%r14
mov    %r13,%rdi
test   %rax,%rax
je     1adf <asn1_parse2+0x8df>
lea    0x71b(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    (%r14),%rax
mov    0x264f(%rip),%rcx
cmp    (%rcx),%rax
jne    19aa <asn1_parse2+0x7aa>
mov    %r13,%rdi
lea    0x6f7(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    0x8(%r14),%eax
test   %eax,%eax
jle    19e9 <asn1_parse2+0x7e9>
mov    %r13,%rdi
xor    %ebp,%ebp
mov    0x10(%r14),%rax
movzbl (%rax,%rbp,1),%edx
xor    %r15d,%r15d
lea    0x6c1(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b74 <asn1_parse2+0x974>
add    $0x1,%rbp
movslq 0x8(%r14),%rax
cmp    %rax,%rbp
mov    %r13,%rdi
jl     19b7 <asn1_parse2+0x7b7>
test   %eax,%eax
jne    1af8 <asn1_parse2+0x8f8>
mov    %r13,%rdi
lea    0x696(%rip),%rsi
mov    $0x2,%edx
jmp    1aeb <asn1_parse2+0x8eb>
cmpl   $0x0,0xc0(%rsp)
je     17b5 <asn1_parse2+0x5b5>
cmpq   $0x0,0x18(%rsp)
jle    17b5 <asn1_parse2+0x5b5>
lea    0x639(%rip),%rsi
mov    $0x1,%edx
mov    %rdi,%rbp
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    0x18(%rsp),%rax
mov    0x78(%rsp),%rdx
cmp    %rdx,%rax
cmovl  %rax,%rdx
cmpl   $0xffffffff,0xc0(%rsp)
ff
mov    0x20(%rsp),%rsi
cmove  %rax,%rdx
mov    %rbp,%rdi
mov    $0x6,%ecx
call   10d0 <BIO_dump_indent@plt>
test   %rax,%rax
jg     17ce <asn1_parse2+0x5ce>
jmp    1bd9 <asn1_parse2+0x9d9>
lea    0x609(%rip),%rsi
mov    $0x1,%edx
mov    %rdi,%rbp
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1c12 <asn1_parse2+0xa12>
mov    0x28(%rsp),%rsi
mov    (%r14),%edx
mov    %rbp,%rdi
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1c12 <asn1_parse2+0xa12>
mov    %r14,%rdi
call   1040 <M_ASN1_OCTET_STRING_free@plt>
jmp    1699 <asn1_parse2+0x499>
lea    0x5d4(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    %r14,%rdi
call   10c0 <M_ASN1_INTEGER_free@plt>
jmp    1699 <asn1_parse2+0x499>
lea    0x5ba(%rip),%rsi
mov    $0xe,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1bd9 <asn1_parse2+0x9d9>
mov    %r14,%rdi
call   10e0 <M_ASN1_ENUMERATED_free@plt>
jmp    1699 <asn1_parse2+0x499>
lea    0x572(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
test   %eax,%eax
jle    1c12 <asn1_parse2+0xa12>
cmpl   $0x0,(%r14)
jle    1aac <asn1_parse2+0x8ac>
mov    %r13,%rdi
xor    %ebp,%ebp
mov    0x28(%rsp),%rax
movzbl (%rax,%rbp,1),%edx
xor    %r15d,%r15d
lea    0x54e(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1c12 <asn1_parse2+0xa12>
add    $0x1,%rbp
movslq (%r14),%rax
cmp    %rax,%rbp
mov    %r13,%rdi
jl     1b29 <asn1_parse2+0x929>
jmp    1aac <asn1_parse2+0x8ac>
mov    $0x1,%r15d
jmp    1ba5 <asn1_parse2+0x9a5>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
xor    %r15d,%r15d
jmp    1b84 <asn1_parse2+0x984>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
jmp    1b87 <asn1_parse2+0x987>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    %r14,%r12
mov    0x60(%rsp),%rdi
test   %rdi,%rdi
je     1b96 <asn1_parse2+0x996>
call   10f0 <ASN1_OBJECT_free@plt>
mov    0x10(%rsp),%rdi
test   %rdi,%rdi
je     1ba5 <asn1_parse2+0x9a5>
call   1040 <M_ASN1_OCTET_STRING_free@plt>
mov    0x20(%rsp),%rax
mov    %rax,(%r12)
mov    %r15d,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0x436(%rip),%rsi
mov    0x30(%rsp),%rdi
mov    $0x12,%edx
call   1120 <BIO_write@plt>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
xor    %r15d,%r15d
jmp    1b87 <asn1_parse2+0x987>
movzbl %cl,%edx
lea    0x456(%rip),%rsi
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    0x30(%rsp),%rdi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
xor    %r15d,%r15d
jmp    1b87 <asn1_parse2+0x987>
mov    $0x2,%r15d
jmp    1b84 <asn1_parse2+0x984>
mov    %r14,0x10(%rsp)
jmp    1b87 <asn1_parse2+0x987>

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

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