#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_10__ TYPE_4__;
typedef struct TYPE_9__ TYPE_3__;
typedef struct TYPE_8__ TYPE_2__;
typedef struct TYPE_7__ TYPE_1__;

/* Type definitions */
struct TYPE_8__ {
  TYPE_3__ *parameter;
  int /*<<< orphan*/ *algorithm;
};
typedef TYPE_2__ X509_ALGOR;
struct TYPE_10__ {
  unsigned char *data;
  int length;
  scalar_t__ flags;
  void *type;
};
struct TYPE_7__ {
  TYPE_4__ *octet_string;
};
struct TYPE_9__ {
  TYPE_1__ value;
  void *type;
};
typedef TYPE_3__ ASN1_TYPE;
typedef TYPE_4__ ASN1_OCTET_STRING;
typedef int /*<<< orphan*/ ASN1_OBJECT;

/* Variables and functions */
int CMS_SharedInfo_encode(unsigned char **, TYPE_2__ *, TYPE_4__ *, size_t);
scalar_t__ CRYPTO_memcmp(unsigned char *, unsigned char *, int);
void *V_ASN1_OBJECT;
void *V_ASN1_OCTET_STRING;
void *V_ASN1_SEQUENCE;
int /*<<< orphan*/ skip_asn1(unsigned char **, long *, void *);
int dh_sharedinfo_encode(unsigned char **pder, unsigned char **pctr,
                         ASN1_OBJECT *key_oid, size_t outlen,
                         const unsigned char *ukm, size_t ukmlen) {
  unsigned char *p;
  int derlen;
  long tlen;
  static unsigned char ctr[4] = {0xF3, 0x17, 0x22, 0x53};
  X509_ALGOR atmp;
  ASN1_OCTET_STRING ctr_oct, ukm_oct, *pukm_oct;
  ASN1_TYPE ctr_atype;
  if (ukmlen > (1L << 30) || outlen > (1L << 30))
    return 0;
  ctr_oct.data = ctr;
  ctr_oct.length = 4;
  ctr_oct.flags = 0;
  ctr_oct.type = V_ASN1_OCTET_STRING;
  ctr_atype.type = V_ASN1_OCTET_STRING;
  ctr_atype.value.octet_string = &ctr_oct;
  atmp.algorithm = key_oid;
  atmp.parameter = &ctr_atype;
  if (ukm) {
    ukm_oct.type = V_ASN1_OCTET_STRING;
    ukm_oct.flags = 0;
    ukm_oct.data = (unsigned char *)ukm;
    ukm_oct.length = ukmlen;
    pukm_oct = &ukm_oct;
  } else
    pukm_oct = NULL;
  derlen = CMS_SharedInfo_encode(pder, &atmp, pukm_oct, outlen);
  if (derlen <= 0)
    return 0;
  p = *pder;
  tlen = derlen;
  if (!skip_asn1(&p, &tlen, V_ASN1_SEQUENCE))
    return 0;
  if (!skip_asn1(&p, &tlen, V_ASN1_SEQUENCE))
    return 0;
  if (!skip_asn1(&p, &tlen, V_ASN1_OBJECT))
    return 0;
  if (!skip_asn1(&p, &tlen, V_ASN1_OCTET_STRING))
    return 0;
  if (CRYPTO_memcmp(p, ctr, 4))
    return 0;
  *pctr = p;
  return derlen;
}


x86 assembly (clang, -O0):
<dh_sharedinfo_encode>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
cmpq   $0x40000000,-0x38(%rbp)
40
ja     116f <dh_sharedinfo_encode+0x3f>
cmpq   $0x40000000,-0x28(%rbp)
40
jbe    117b <dh_sharedinfo_encode+0x4b>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
lea    0x2eb6(%rip),%rax
mov    %rax,-0x80(%rbp)
movl   $0x4,-0x78(%rbp)
movq   $0x0,-0x70(%rbp)
mov    0x2e3c(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x68(%rbp)
mov    0x2e2e(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0xb0(%rbp)
lea    -0x80(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
lea    -0xb8(%rbp),%rax
mov    %rax,-0x60(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     1221 <dh_sharedinfo_encode+0xf1>
mov    0x2df4(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x88(%rbp)
movq   $0x0,-0x90(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0xa0(%rbp)
mov    -0x38(%rbp),%rax
mov    %eax,-0x98(%rbp)
lea    -0xa0(%rbp),%rax
mov    %rax,-0xa8(%rbp)
jmp    122c <dh_sharedinfo_encode+0xfc>
movq   $0x0,-0xa8(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0xa8(%rbp),%rdx
mov    -0x28(%rbp),%rcx
lea    -0x60(%rbp),%rsi
call   1040 <CMS_SharedInfo_encode@plt>
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
jg     125d <dh_sharedinfo_encode+0x12d>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x40(%rbp)
movslq -0x44(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    0x2d51(%rip),%rax
mov    (%rax),%rdx
lea    -0x40(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1050 <skip_asn1@plt>
cmp    $0x0,%eax
jne    129c <dh_sharedinfo_encode+0x16c>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
mov    0x2d25(%rip),%rax
mov    (%rax),%rdx
lea    -0x40(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1050 <skip_asn1@plt>
cmp    $0x0,%eax
jne    12c8 <dh_sharedinfo_encode+0x198>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
mov    0x2d19(%rip),%rax
mov    (%rax),%rdx
lea    -0x40(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1050 <skip_asn1@plt>
cmp    $0x0,%eax
jne    12f4 <dh_sharedinfo_encode+0x1c4>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
mov    0x2cdd(%rip),%rax
mov    (%rax),%rdx
lea    -0x40(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1050 <skip_asn1@plt>
cmp    $0x0,%eax
jne    1320 <dh_sharedinfo_encode+0x1f0>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
mov    -0x40(%rbp),%rdi
lea    0x2d0d(%rip),%rsi
mov    $0x4,%edx
call   1030 <CRYPTO_memcmp@plt>
cmp    $0x0,%rax
je     134b <dh_sharedinfo_encode+0x21b>
movl   $0x0,-0x4(%rbp)
jmp    135c <dh_sharedinfo_encode+0x22c>
mov    -0x40(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dh_sharedinfo_encode>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x70,%rsp
xor    %ebx,%ebx
cmp    $0x40000000,%rcx
ja     127e <dh_sharedinfo_encode+0x14e>
cmp    $0x40000000,%r9
ja     127e <dh_sharedinfo_encode+0x14e>
mov    %rsi,%r14
mov    %rdi,%rbp
lea    0x2ed3(%rip),%rax
mov    %rax,0x50(%rsp)
movl   $0x4,0x58(%rsp)
movq   $0x0,0x60(%rsp)
mov    0x2e56(%rip),%r12
mov    (%r12),%rax
mov    %rax,0x68(%rsp)
mov    %rax,0x18(%rsp)
lea    0x50(%rsp),%rsi
mov    %rsi,0x10(%rsp)
mov    %rdx,0x28(%rsp)
lea    0x10(%rsp),%rdx
mov    %rdx,0x20(%rsp)
xor    %ebx,%ebx
test   %r8,%r8
je     11cf <dh_sharedinfo_encode+0x9f>
mov    %rax,0x48(%rsp)
movq   $0x0,0x40(%rsp)
mov    %r8,0x30(%rsp)
mov    %r9d,0x38(%rsp)
lea    0x30(%rsp),%rdx
jmp    11d1 <dh_sharedinfo_encode+0xa1>
xor    %edx,%edx
lea    0x20(%rsp),%rsi
mov    %rbp,%rdi
call   1040 <CMS_SharedInfo_encode@plt>
test   %eax,%eax
jle    127e <dh_sharedinfo_encode+0x14e>
mov    %eax,%r15d
mov    0x0(%rbp),%rax
mov    %rax,(%rsp)
mov    %r15d,%eax
mov    %rax,0x8(%rsp)
mov    0x2dc8(%rip),%rbp
mov    0x0(%rbp),%rdx
mov    %rsp,%rdi
lea    0x8(%rsp),%rsi
call   1050 <skip_asn1@plt>
test   %eax,%eax
je     127e <dh_sharedinfo_encode+0x14e>
mov    0x0(%rbp),%rdx
mov    %rsp,%rdi
lea    0x8(%rsp),%rsi
call   1050 <skip_asn1@plt>
test   %eax,%eax
je     127e <dh_sharedinfo_encode+0x14e>
mov    0x2db7(%rip),%rax
mov    (%rax),%rdx
mov    %rsp,%rdi
lea    0x8(%rsp),%rsi
call   1050 <skip_asn1@plt>
test   %eax,%eax
je     127e <dh_sharedinfo_encode+0x14e>
mov    (%r12),%rdx
mov    %rsp,%rdi
lea    0x8(%rsp),%rsi
call   1050 <skip_asn1@plt>
test   %eax,%eax
je     127e <dh_sharedinfo_encode+0x14e>
mov    (%rsp),%rdi
lea    0x2dd3(%rip),%rsi
mov    $0x4,%edx
call   1030 <CRYPTO_memcmp@plt>
test   %rax,%rax
jne    127e <dh_sharedinfo_encode+0x14e>
mov    (%rsp),%rax
mov    %rax,(%r14)
mov    %r15d,%ebx
mov    %ebx,%eax
add    $0x70,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.TYPE_8__ = type { %struct.TYPE_9__*, i32* }
%struct.TYPE_9__ = type { %struct.TYPE_7__, i8* }
%struct.TYPE_7__ = type { %struct.TYPE_10__* }
%struct.TYPE_10__ = type { i8*, i32, i64, i8* }
@dh_sharedinfo_encode.ctr = internal global [4 x i8] c"\F3\17\22S"
@V_ASN1_OCTET_STRING = global i8* null
@V_ASN1_SEQUENCE = global i8* null
@V_ASN1_OBJECT = global i8* null
define i32 @dh_sharedinfo_encode(i8** %0, i8** %1, i32* %2, i64 %3, i8* %4, i64 %5) {
%7 = alloca i32
%8 = alloca i8**
%9 = alloca i8**
%10 = alloca i32*
%11 = alloca i64
%12 = alloca i8*
%13 = alloca i64
%14 = alloca i8*
%15 = alloca i32
%16 = alloca i64
%17 = alloca %struct.TYPE_8__
%18 = alloca %struct.TYPE_10__
%19 = alloca %struct.TYPE_10__
%20 = alloca %struct.TYPE_10__*
%21 = alloca %struct.TYPE_9__
store i8** %0, i8*** %8
store i8** %1, i8*** %9
store i32* %2, i32** %10
store i64 %3, i64* %11
store i8* %4, i8** %12
store i64 %5, i64* %13
%22 = load i64, i64* %13
%23 = icmp ugt i64 %22, 1073741824
br i1 %23, label %27, label %24
24: ; preds = %6
%25 = load i64, i64* %11
%26 = icmp ugt i64 %25, 1073741824
br i1 %26, label %27, label %28
27: ; preds = %24, %6
store i32 0, i32* %7
br label %94
28: ; preds = %24
%29 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %18, i32 0, i32 0
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @dh_sharedinfo_encode.ctr, i64 0, i64 0), i8** %29
%30 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %18, i32 0, i32 1
store i32 4, i32* %30
%31 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %18, i32 0, i32 2
store i64 0, i64* %31
%32 = load i8*, i8** @V_ASN1_OCTET_STRING
%33 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %18, i32 0, i32 3
store i8* %32, i8** %33
%34 = load i8*, i8** @V_ASN1_OCTET_STRING
%35 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %21, i32 0, i32 1
store i8* %34, i8** %35
%36 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %21, i32 0, i32 0
%37 = getelementptr inbounds %struct.TYPE_7__, %struct.TYPE_7__* %36, i32 0, i32 0
store %struct.TYPE_10__* %18, %struct.TYPE_10__** %37
%38 = load i32*, i32** %10
%39 = getelementptr inbounds %struct.TYPE_8__, %struct.TYPE_8__* %17, i32 0, i32 1
store i32* %38, i32** %39
%40 = getelementptr inbounds %struct.TYPE_8__, %struct.TYPE_8__* %17, i32 0, i32 0
store %struct.TYPE_9__* %21, %struct.TYPE_9__** %40
%41 = load i8*, i8** %12
%42 = icmp ne i8* %41, null
br i1 %42, label %43, label %52
43: ; preds = %28
%44 = load i8*, i8** @V_ASN1_OCTET_STRING
%45 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %19, i32 0, i32 3
store i8* %44, i8** %45
%46 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %19, i32 0, i32 2
store i64 0, i64* %46
%47 = load i8*, i8** %12
%48 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %19, i32 0, i32 0
store i8* %47, i8** %48
%49 = load i64, i64* %13
%50 = trunc i64 %49 to i32
%51 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %19, i32 0, i32 1
store i32 %50, i32* %51
store %struct.TYPE_10__* %19, %struct.TYPE_10__** %20
br label %53
52: ; preds = %28
store %struct.TYPE_10__* null, %struct.TYPE_10__** %20
br label %53
53: ; preds = %52, %43
%54 = load i8**, i8*** %8
%55 = load %struct.TYPE_10__*, %struct.TYPE_10__** %20
%56 = load i64, i64* %11
%57 = call i32 @CMS_SharedInfo_encode(i8** %54, %struct.TYPE_8__* %17, %struct.TYPE_10__* %55, i64 %56)
store i32 %57, i32* %15
%58 = load i32, i32* %15
%59 = icmp sle i32 %58, 0
br i1 %59, label %60, label %61
60: ; preds = %53
store i32 0, i32* %7
br label %94
61: ; preds = %53
%62 = load i8**, i8*** %8
%63 = load i8*, i8** %62
store i8* %63, i8** %14
%64 = load i32, i32* %15
%65 = sext i32 %64 to i64
store i64 %65, i64* %16
%66 = load i8*, i8** @V_ASN1_SEQUENCE
%67 = call i32 @skip_asn1(i8** %14, i64* %16, i8* %66)
%68 = icmp ne i32 %67, 0
br i1 %68, label %70, label %69
69: ; preds = %61
store i32 0, i32* %7
br label %94
70: ; preds = %61
%71 = load i8*, i8** @V_ASN1_SEQUENCE
%72 = call i32 @skip_asn1(i8** %14, i64* %16, i8* %71)
%73 = icmp ne i32 %72, 0
br i1 %73, label %75, label %74
74: ; preds = %70
store i32 0, i32* %7
br label %94
75: ; preds = %70
%76 = load i8*, i8** @V_ASN1_OBJECT
%77 = call i32 @skip_asn1(i8** %14, i64* %16, i8* %76)
%78 = icmp ne i32 %77, 0
br i1 %78, label %80, label %79
79: ; preds = %75
store i32 0, i32* %7
br label %94
80: ; preds = %75
%81 = load i8*, i8** @V_ASN1_OCTET_STRING
%82 = call i32 @skip_asn1(i8** %14, i64* %16, i8* %81)
%83 = icmp ne i32 %82, 0
br i1 %83, label %85, label %84
84: ; preds = %80
store i32 0, i32* %7
br label %94
85: ; preds = %80
%86 = load i8*, i8** %14
%87 = call i64 @CRYPTO_memcmp(i8* %86, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @dh_sharedinfo_encode.ctr, i64 0, i64 0), i32 4)
%88 = icmp ne i64 %87, 0
br i1 %88, label %89, label %90
89: ; preds = %85
store i32 0, i32* %7
br label %94
90: ; preds = %85
%91 = load i8*, i8** %14
%92 = load i8**, i8*** %9
store i8* %91, i8** %92
%93 = load i32, i32* %15
store i32 %93, i32* %7
br label %94
94: ; preds = %90, %89, %84, %79, %74, %69, %60, %27
%95 = load i32, i32* %7
ret i32 %95
}

LLVM IR (-O2):
%struct.TYPE_8__ = type { %struct.TYPE_9__*, i32* }
%struct.TYPE_9__ = type { %struct.TYPE_7__, i8* }
%struct.TYPE_7__ = type { %struct.TYPE_10__* }
%struct.TYPE_10__ = type { i8*, i32, i64, i8* }
@dh_sharedinfo_encode.ctr = internal global [4 x i8] c"\F3\17\22S"
@V_ASN1_OCTET_STRING = global i8* null
@V_ASN1_SEQUENCE = global i8* null
@V_ASN1_OBJECT = global i8* null
define i32 @dh_sharedinfo_encode(i8** %0, i8** nocapture writeonly %1, i32* %2, i64 %3, i8* %4, i64 %5) {
%7 = alloca i8*
%8 = alloca i64
%9 = alloca %struct.TYPE_8__
%10 = alloca %struct.TYPE_10__
%11 = alloca %struct.TYPE_10__
%12 = alloca %struct.TYPE_9__
%13 = bitcast i8** %7 to i8*
%14 = bitcast i64* %8 to i8*
%15 = bitcast %struct.TYPE_8__* %9 to i8*
%16 = bitcast %struct.TYPE_10__* %10 to i8*
%17 = bitcast %struct.TYPE_10__* %11 to i8*
%18 = bitcast %struct.TYPE_9__* %12 to i8*
%19 = icmp ugt i64 %5, 1073741824
%20 = icmp ugt i64 %3, 1073741824
%21 = or i1 %20, %19
br i1 %21, label %67, label %22
22: ; preds = %6
%23 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %10, i64 0, i32 0
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @dh_sharedinfo_encode.ctr, i64 0, i64 0), i8** %23
%24 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %10, i64 0, i32 1
store i32 4, i32* %24
%25 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %10, i64 0, i32 2
store i64 0, i64* %25
%26 = load i8*, i8** @V_ASN1_OCTET_STRING
%27 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %10, i64 0, i32 3
store i8* %26, i8** %27
%28 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %12, i64 0, i32 1
store i8* %26, i8** %28
%29 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %12, i64 0, i32 0, i32 0
store %struct.TYPE_10__* %10, %struct.TYPE_10__** %29
%30 = getelementptr inbounds %struct.TYPE_8__, %struct.TYPE_8__* %9, i64 0, i32 1
store i32* %2, i32** %30
%31 = getelementptr inbounds %struct.TYPE_8__, %struct.TYPE_8__* %9, i64 0, i32 0
store %struct.TYPE_9__* %12, %struct.TYPE_9__** %31
%32 = icmp eq i8* %4, null
br i1 %32, label %39, label %33
33: ; preds = %22
%34 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %11, i64 0, i32 3
store i8* %26, i8** %34
%35 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %11, i64 0, i32 2
store i64 0, i64* %35
%36 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %11, i64 0, i32 0
store i8* %4, i8** %36
%37 = trunc i64 %5 to i32
%38 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %11, i64 0, i32 1
store i32 %37, i32* %38
br label %39
39: ; preds = %22, %33
%40 = phi %struct.TYPE_10__* [ %11, %33 ], [ null, %22 ]
%41 = call i32 @CMS_SharedInfo_encode(i8** %0, %struct.TYPE_8__* %9, %struct.TYPE_10__* %40, i64 %3)
%42 = icmp slt i32 %41, 1
br i1 %42, label %67, label %43
43: ; preds = %39
%44 = load i8*, i8** %0
store i8* %44, i8** %7
%45 = zext i32 %41 to i64
store i64 %45, i64* %8
%46 = load i8*, i8** @V_ASN1_SEQUENCE
%47 = call i32 @skip_asn1(i8** %7, i64* %8, i8* %46)
%48 = icmp eq i32 %47, 0
br i1 %48, label %67, label %49
49: ; preds = %43
%50 = load i8*, i8** @V_ASN1_SEQUENCE
%51 = call i32 @skip_asn1(i8** %7, i64* %8, i8* %50)
%52 = icmp eq i32 %51, 0
br i1 %52, label %67, label %53
53: ; preds = %49
%54 = load i8*, i8** @V_ASN1_OBJECT
%55 = call i32 @skip_asn1(i8** %7, i64* %8, i8* %54)
%56 = icmp eq i32 %55, 0
br i1 %56, label %67, label %57
57: ; preds = %53
%58 = load i8*, i8** @V_ASN1_OCTET_STRING
%59 = call i32 @skip_asn1(i8** %7, i64* %8, i8* %58)
%60 = icmp eq i32 %59, 0
br i1 %60, label %67, label %61
61: ; preds = %57
%62 = load i8*, i8** %7
%63 = call i64 @CRYPTO_memcmp(i8* %62, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @dh_sharedinfo_encode.ctr, i64 0, i64 0), i32 4)
%64 = icmp eq i64 %63, 0
br i1 %64, label %65, label %67
65: ; preds = %61
%66 = load i8*, i8** %7
store i8* %66, i8** %1
br label %67
67: ; preds = %61, %57, %53, %49, %43, %39, %6, %65
%68 = phi i32 [ %41, %65 ], [ 0, %6 ], [ 0, %39 ], [ 0, %43 ], [ 0, %49 ], [ 0, %53 ], [ 0, %57 ], [ 0, %61 ]
ret i32 %68
}