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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ KickDes(char *, char *);
int /*<<< orphan*/ PlayDes(char *, char *);
int /*<<< orphan*/ SetKey(char *);
int /*<<< orphan*/ gets(char *);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ system(char *);
int main() {
  int i = 0;
  char MesHex[16] = {0};
  char MyKey[8] = {0};
  char YourKey[8] = {0};
  char MyMessage[8] = {0};
  printf("Welcome! Please input your Message(64 bit):\n");
  gets(MyMessage);
  printf("Please input your Secret Key:\n");
  gets(MyKey);
  while (MyKey[i] != '\0') {
    i++;
  }
  while (i != 8) {
    printf("Please input a correct Secret Key!\n");
    gets(MyKey);
    i = 0;
    while (MyKey[i] != '\0') {
      i++;
    }
  }
  SetKey(MyKey);
  PlayDes(MesHex, MyMessage);
  printf("Your Message is Encrypted!:\n");
  for (i = 0; i < 16; i++) {
    printf("%c ", MesHex[i]);
  }
  printf("\n");
  printf("\n");
  printf("Please input your Secret Key to Deciphering:\n");
  gets(YourKey);
  SetKey(YourKey);
  KickDes(MyMessage, MesHex);
  printf("Deciphering Over !!:\n");
  for (i = 0; i < 8; i++) {
    printf("%c ", MyMessage[i]);
  }
  printf("\n");
  system("pause");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
lea    -0x20(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1070 <memset@plt>
lea    -0x28(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1070 <memset@plt>
lea    -0x30(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1070 <memset@plt>
lea    -0x38(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1070 <memset@plt>
lea    0xe33(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    -0x38(%rbp),%rdi
call   1080 <gets@plt>
lea    0xe49(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    -0x28(%rbp),%rdi
call   1080 <gets@plt>
movslq -0x8(%rbp),%rax
movsbl -0x28(%rbp,%rax,1),%eax
cmp    $0x0,%eax
je     1214 <main+0xa4>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11f4 <main+0x84>
jmp    1219 <main+0xa9>
cmpl   $0x8,-0x8(%rbp)
je     1266 <main+0xf6>
lea    0xe22(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    -0x28(%rbp),%rdi
call   1080 <gets@plt>
movl   $0x0,-0x8(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x28(%rbp,%rax,1),%eax
cmp    $0x0,%eax
je     1261 <main+0xf1>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1241 <main+0xd1>
jmp    1219 <main+0xa9>
lea    -0x28(%rbp),%rdi
call   1030 <SetKey@plt>
lea    -0x20(%rbp),%rdi
lea    -0x38(%rbp),%rsi
call   1060 <PlayDes@plt>
lea    0xded(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    12c0 <main+0x150>
movslq -0x8(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%esi
lea    0xde2(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1291 <main+0x121>
lea    0xda7(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd99(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xdae(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    -0x30(%rbp),%rdi
call   1080 <gets@plt>
lea    -0x30(%rbp),%rdi
call   1030 <SetKey@plt>
lea    -0x38(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1090 <KickDes@plt>
lea    0xdaf(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    134d <main+0x1dd>
movslq -0x8(%rbp),%rax
movsbl -0x38(%rbp,%rax,1),%esi
lea    0xd55(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    131e <main+0x1ae>
lea    0xd1a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd73(%rip),%rdi
call   1040 <system@plt>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x38,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,0x10(%rsp)
movq   $0x0,0x28(%rsp)
movq   $0x0,0x30(%rsp)
movq   $0x0,0x8(%rsp)
lea    0xe55(%rip),%rdi
call   1040 <puts@plt>
lea    0x8(%rsp),%rdi
call   1090 <gets@plt>
lea    0xe6b(%rip),%rdi
call   1040 <puts@plt>
lea    0x28(%rsp),%rdi
call   1090 <gets@plt>
xor    %eax,%eax
nopl   0x0(%rax)
cmpb   $0x0,0x28(%rsp,%rax,1)
lea    0x1(%rax),%rax
jne    11e0 <main+0x60>
cmp    $0x9,%eax
je     1230 <main+0xb0>
lea    0xebb(%rip),%r14
lea    0x28(%rsp),%rbx
nopl   0x0(%rax)
mov    %r14,%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
call   1090 <gets@plt>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmpb   $0x0,0x28(%rsp,%rax,1)
lea    0x1(%rax),%rax
jne    1220 <main+0xa0>
cmp    $0x9,%eax
jne    1200 <main+0x80>
lea    0x28(%rsp),%rdi
call   1050 <SetKey@plt>
lea    0x10(%rsp),%r14
lea    0x8(%rsp),%r15
mov    %r14,%rdi
mov    %r15,%rsi
call   1080 <PlayDes@plt>
lea    0xdfe(%rip),%rdi
call   1040 <puts@plt>
movsbl 0x10(%rsp),%esi
lea    0xd99(%rip),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x11(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x12(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x13(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x15(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x16(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x17(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x18(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x19(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x1a(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x1b(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x1c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x1d(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x1e(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x1f(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xd03(%rip),%rdi
call   1040 <puts@plt>
lea    0x30(%rsp),%r12
mov    %r12,%rdi
call   1090 <gets@plt>
mov    %r12,%rdi
call   1050 <SetKey@plt>
mov    %r15,%rdi
mov    %r14,%rsi
call   10a0 <KickDes@plt>
lea    0xd04(%rip),%rdi
call   1040 <puts@plt>
movsbl 0x8(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0x9(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0xa(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0xb(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0xc(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0xd(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0xe(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsbl 0xf(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xbdd(%rip),%rdi
call   1060 <system@plt>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [45 x i8] c"Welcome! Please input your Message(64 bit):\0A\00"
@.str.1 = [31 x i8] c"Please input your Secret Key:\0A\00"
@.str.2 = [36 x i8] c"Please input a correct Secret Key!\0A\00"
@.str.3 = [29 x i8] c"Your Message is Encrypted!:\0A\00"
@.str.4 = [4 x i8] c"%c \00"
@.str.5 = [2 x i8] c"\0A\00"
@.str.6 = [46 x i8] c"Please input your Secret Key to Deciphering:\0A\00"
@.str.7 = [22 x i8] c"Deciphering Over !!:\0A\00"
@.str.8 = [6 x i8] c"pause\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca [16 x i8]
%4 = alloca [8 x i8]
%5 = alloca [8 x i8]
%6 = alloca [8 x i8]
store i32 0, i32* %1
store i32 0, i32* %2
%7 = bitcast [16 x i8]* %3 to i8*
%8 = bitcast [8 x i8]* %4 to i8*
%9 = bitcast [8 x i8]* %5 to i8*
%10 = bitcast [8 x i8]* %6 to i8*
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0))
%12 = getelementptr inbounds [8 x i8], [8 x i8]* %6, i64 0, i64 0
%13 = call i32 @gets(i8* %12)
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.1, i64 0, i64 0))
%15 = getelementptr inbounds [8 x i8], [8 x i8]* %4, i64 0, i64 0
%16 = call i32 @gets(i8* %15)
br label %17
17: ; preds = %24, %0
%18 = load i32, i32* %2
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [8 x i8], [8 x i8]* %4, i64 0, i64 %19
%21 = load i8, i8* %20
%22 = sext i8 %21 to i32
%23 = icmp ne i32 %22, 0
br i1 %23, label %24, label %27
24: ; preds = %17
%25 = load i32, i32* %2
%26 = add nsw i32 %25, 1
store i32 %26, i32* %2
br label %17
27: ; preds = %17
br label %28
28: ; preds = %45, %27
%29 = load i32, i32* %2
%30 = icmp ne i32 %29, 8
br i1 %30, label %31, label %46
31: ; preds = %28
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0))
%33 = getelementptr inbounds [8 x i8], [8 x i8]* %4, i64 0, i64 0
%34 = call i32 @gets(i8* %33)
store i32 0, i32* %2
br label %35
35: ; preds = %42, %31
%36 = load i32, i32* %2
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [8 x i8], [8 x i8]* %4, i64 0, i64 %37
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = icmp ne i32 %40, 0
br i1 %41, label %42, label %45
42: ; preds = %35
%43 = load i32, i32* %2
%44 = add nsw i32 %43, 1
store i32 %44, i32* %2
br label %35
45: ; preds = %35
br label %28
46: ; preds = %28
%47 = getelementptr inbounds [8 x i8], [8 x i8]* %4, i64 0, i64 0
%48 = call i32 @SetKey(i8* %47)
%49 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 0
%50 = getelementptr inbounds [8 x i8], [8 x i8]* %6, i64 0, i64 0
%51 = call i32 @PlayDes(i8* %49, i8* %50)
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %2
br label %53
53: ; preds = %63, %46
%54 = load i32, i32* %2
%55 = icmp slt i32 %54, 16
br i1 %55, label %56, label %66
56: ; preds = %53
%57 = load i32, i32* %2
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 %58
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %61)
br label %63
63: ; preds = %56
%64 = load i32, i32* %2
%65 = add nsw i32 %64, 1
store i32 %65, i32* %2
br label %53
66: ; preds = %53
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
%68 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
%69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.6, i64 0, i64 0))
%70 = getelementptr inbounds [8 x i8], [8 x i8]* %5, i64 0, i64 0
%71 = call i32 @gets(i8* %70)
%72 = getelementptr inbounds [8 x i8], [8 x i8]* %5, i64 0, i64 0
%73 = call i32 @SetKey(i8* %72)
%74 = getelementptr inbounds [8 x i8], [8 x i8]* %6, i64 0, i64 0
%75 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 0
%76 = call i32 @KickDes(i8* %74, i8* %75)
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.7, i64 0, i64 0))
store i32 0, i32* %2
br label %78
78: ; preds = %88, %66
%79 = load i32, i32* %2
%80 = icmp slt i32 %79, 8
br i1 %80, label %81, label %91
81: ; preds = %78
%82 = load i32, i32* %2
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [8 x i8], [8 x i8]* %6, i64 0, i64 %83
%85 = load i8, i8* %84
%86 = sext i8 %85 to i32
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %86)
br label %88
88: ; preds = %81
%89 = load i32, i32* %2
%90 = add nsw i32 %89, 1
store i32 %90, i32* %2
br label %78
91: ; preds = %78
%92 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
%93 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0))
%94 = load i32, i32* %1
ret i32 %94
}

LLVM IR (-O2):
@.str.4 = [4 x i8] c"%c \00"
@.str.8 = [6 x i8] c"pause\00"
@str = [44 x i8] c"Welcome! Please input your Message(64 bit):\00"
@str.9 = [30 x i8] c"Please input your Secret Key:\00"
@str.10 = [28 x i8] c"Your Message is Encrypted!:\00"
@str.11 = [45 x i8] c"Please input your Secret Key to Deciphering:\00"
@str.12 = [21 x i8] c"Deciphering Over !!:\00"
@str.13 = [35 x i8] c"Please input a correct Secret Key!\00"
define i32 @main() {
%1 = alloca [16 x i8]
%2 = alloca i64
%3 = bitcast i64* %2 to [8 x i8]*
%4 = alloca i64
%5 = alloca i64
%6 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 0
%7 = bitcast i64* %2 to i8*
store i64 0, i64* %2
%8 = bitcast i64* %4 to i8*
store i64 0, i64* %4
%9 = bitcast i64* %5 to i8*
store i64 0, i64* %5
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @str, i64 0, i64 0))
%11 = call i32 @gets(i8* %9)
%12 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.9, i64 0, i64 0))
%13 = call i32 @gets(i8* %7)
br label %14
14: ; preds = %14, %0
%15 = phi i64 [ %19, %14 ], [ 0, %0 ]
%16 = getelementptr inbounds [8 x i8], [8 x i8]* %3, i64 0, i64 %15
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 0
%19 = add nuw i64 %15, 1
br i1 %18, label %20, label %14
20: ; preds = %14
%21 = bitcast i64* %5 to [8 x i8]*
%22 = trunc i64 %15 to i32
%23 = icmp eq i32 %22, 8
br i1 %23, label %36, label %27
24: ; preds = %30
%25 = trunc i64 %31 to i32
%26 = icmp eq i32 %25, 8
br i1 %26, label %36, label %27
27: ; preds = %20, %24
%28 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.13, i64 0, i64 0))
%29 = call i32 @gets(i8* %7)
br label %30
30: ; preds = %30, %27
%31 = phi i64 [ %35, %30 ], [ 0, %27 ]
%32 = getelementptr inbounds [8 x i8], [8 x i8]* %3, i64 0, i64 %31
%33 = load i8, i8* %32
%34 = icmp eq i8 %33, 0
%35 = add nuw i64 %31, 1
br i1 %34, label %24, label %30
36: ; preds = %24, %20
%37 = call i32 @SetKey(i8* %7)
%38 = call i32 @PlayDes(i8* %6, i8* %9)
%39 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.10, i64 0, i64 0))
%40 = load i8, i8* %6
%41 = sext i8 %40 to i32
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %41)
%43 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 1
%44 = load i8, i8* %43
%45 = sext i8 %44 to i32
%46 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %45)
%47 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 2
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %49)
%51 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 3
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %53)
%55 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 4
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %57)
%59 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 5
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %61)
%63 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 6
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %65)
%67 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 7
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %69)
%71 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 8
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %73)
%75 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 9
%76 = load i8, i8* %75
%77 = sext i8 %76 to i32
%78 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %77)
%79 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 10
%80 = load i8, i8* %79
%81 = sext i8 %80 to i32
%82 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %81)
%83 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 11
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %85)
%87 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 12
%88 = load i8, i8* %87
%89 = sext i8 %88 to i32
%90 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %89)
%91 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 13
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %93)
%95 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 14
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %97)
%99 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 15
%100 = load i8, i8* %99
%101 = sext i8 %100 to i32
%102 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %101)
%103 = call i32 @putchar(i32 10)
%104 = call i32 @putchar(i32 10)
%105 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.11, i64 0, i64 0))
%106 = call i32 @gets(i8* %8)
%107 = call i32 @SetKey(i8* %8)
%108 = call i32 @KickDes(i8* %9, i8* %6)
%109 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.12, i64 0, i64 0))
%110 = bitcast i64* %5 to i8*
%111 = load i8, i8* %110
%112 = sext i8 %111 to i32
%113 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %112)
%114 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 1
%115 = load i8, i8* %114
%116 = sext i8 %115 to i32
%117 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %116)
%118 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 2
%119 = load i8, i8* %118
%120 = sext i8 %119 to i32
%121 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %120)
%122 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 3
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %124)
%126 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 4
%127 = load i8, i8* %126
%128 = sext i8 %127 to i32
%129 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %128)
%130 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 5
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %132)
%134 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 6
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
%137 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %136)
%138 = getelementptr inbounds [8 x i8], [8 x i8]* %21, i64 0, i64 7
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %140)
%142 = call i32 @putchar(i32 10)
%143 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0))
ret i32 0
}