#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 */
typedef int /*<<< orphan*/ buffer;

/* Variables and functions */
size_t aspack(char **, int, char *, int, ...);
int /*<<< orphan*/ free(char *);
int /*<<< orphan*/ int_ok(char, char);
int /*<<< orphan*/ size_ok(size_t, int);
size_t snpack(char *, int, char *, int, ...);
size_t snunpack(char *, int, char *, char *, ...);
int /*<<< orphan*/ str_ok(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
int /*<<< orphan*/ test(char *);
int /*<<< orphan*/ title(char *);
int main(void) {
  char buffer[20];
  size_t len;
  title("snpack()");
  test("c");
  len = snpack(buffer, sizeof(buffer), "c", 0);
  size_ok(len, 1);
  int_ok(buffer[0], 0);
  test("cc");
  len = snpack(buffer, sizeof(buffer), "cc", 1, 2);
  size_ok(len, 2);
  int_ok(buffer[0], 1);
  int_ok(buffer[1], 2);
  test("c c c");
  len = snpack(buffer, sizeof(buffer), "c c c", 3, 4, 5);
  size_ok(len, 3);
  int_ok(buffer[0], 3);
  int_ok(buffer[1], 4);
  int_ok(buffer[2], 5);
  test("c4");
  len = snpack(buffer, sizeof(buffer), "c4", 6, 7, 8, 9);
  size_ok(len, 4);
  int_ok(buffer[0], 6);
  int_ok(buffer[1], 7);
  int_ok(buffer[2], 8);
  int_ok(buffer[3], 9);
  test("c15");
  len = snpack(buffer, sizeof(buffer), "c15", 'H', 'e', 'l', 'l', 'o', ',', ' ',
               'w', 'o', 'r', 'l', 'd', '!', '\n', 0);
  size_ok(len, 15);
  str_ok(buffer, "Hello, world!\n");
  test("cc limit");
  buffer[1] = 0;
  len = snpack(buffer, 1, "cc", 100, 101);
  size_ok(len, 1);
  int_ok(buffer[0], 100);
  int_ok(buffer[1], 0);
  test("c count");
  len = snpack(NULL, 0, "c", 0);
  size_ok(len, 1);
  test("cc count");
  len = snpack(NULL, 0, "cc", 1, 2);
  title("aspack()");
  char *dynbuffer;
  test("c");
  len = aspack(&dynbuffer, 20, "c", 0);
  size_ok(len, 1);
  int_ok(dynbuffer[0], 0);
  free(dynbuffer);
  test("cc");
  len = aspack(&dynbuffer, 20, "cc", 1, 2);
  size_ok(len, 2);
  int_ok(dynbuffer[0], 1);
  int_ok(dynbuffer[1], 2);
  free(dynbuffer);
  test("c c c");
  len = aspack(&dynbuffer, 20, "c c c", 3, 4, 5);
  size_ok(len, 3);
  int_ok(dynbuffer[0], 3);
  int_ok(dynbuffer[1], 4);
  int_ok(dynbuffer[2], 5);
  free(dynbuffer);
  test("c4");
  len = aspack(&dynbuffer, 20, "c4", 6, 7, 8, 9);
  size_ok(len, 4);
  int_ok(dynbuffer[0], 6);
  int_ok(dynbuffer[1], 7);
  int_ok(dynbuffer[2], 8);
  int_ok(dynbuffer[3], 9);
  free(dynbuffer);
  test("c15");
  len = aspack(&dynbuffer, 20, "c15", 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w',
               'o', 'r', 'l', 'd', '!', '\n', 0);
  size_ok(len, 15);
  str_ok(dynbuffer, "Hello, world!\n");
  free(dynbuffer);
  test("cc limit");
  dynbuffer[1] = 0;
  len = aspack(&dynbuffer, 1, "cc", 100, 101);
  size_ok(len, 1);
  int_ok(dynbuffer[0], 100);
  int_ok(dynbuffer[1], 0);
  free(dynbuffer);
  title("snunpack()");
  char c1, c2, c3, c4, c5;
  char c6, c7, c8, c9, c10;
  char c11, c12, c13, c14, c15;
  test("c");
  buffer[0] = 0;
  c1 = -1;
  len = snunpack(buffer, sizeof(buffer), "c", &c1);
  size_ok(len, 1);
  int_ok(c1, 0);
  test("cc");
  buffer[0] = 1;
  buffer[1] = 2;
  c1 = -1;
  c2 = -1;
  len = snunpack(buffer, sizeof(buffer), "cc", &c1, &c2);
  size_ok(len, 2);
  int_ok(c1, 1);
  int_ok(c2, 2);
  test("c c c");
  buffer[0] = 3;
  buffer[1] = 4;
  buffer[2] = 5;
  c1 = -1;
  c2 = -1;
  c3 = -1;
  len = snunpack(buffer, sizeof(buffer), "c c c", &c1, &c2, &c3);
  size_ok(len, 3);
  int_ok(c1, 3);
  int_ok(c2, 4);
  int_ok(c3, 5);
  test("c4");
  buffer[0] = 6;
  buffer[1] = 7;
  buffer[2] = 8;
  buffer[3] = 9;
  c1 = -1;
  c2 = -1;
  c3 = -1;
  c4 = -1;
  len = snunpack(buffer, sizeof(buffer), "c4", &c1, &c2, &c3, &c4);
  size_ok(len, 4);
  int_ok(c1, 6);
  int_ok(c2, 7);
  int_ok(c3, 8);
  int_ok(c4, 9);
  test("c15");
  strcpy(buffer, "Hello, world!\n");
  c1 = -1;
  c2 = -1;
  c3 = -1;
  c4 = -1;
  c5 = -1;
  c6 = -1;
  c7 = -1;
  c8 = -1;
  c9 = -1;
  c10 = -1;
  c11 = -1;
  c12 = -1;
  c13 = -1;
  c14 = -1;
  c15 = -1;
  len = snunpack(buffer, sizeof(buffer), "c15", &c1, &c2, &c3, &c4, &c5, &c6,
                 &c7, &c8, &c9, &c10, &c11, &c12, &c13, &c14, &c15);
  size_ok(len, 15);
  int_ok(c1, 'H');
  int_ok(c2, 'e');
  int_ok(c3, 'l');
  int_ok(c4, 'l');
  int_ok(c5, 'o');
  int_ok(c6, ',');
  int_ok(c7, ' ');
  int_ok(c8, 'w');
  int_ok(c9, 'o');
  int_ok(c10, 'r');
  int_ok(c11, 'l');
  int_ok(c12, 'd');
  int_ok(c13, '!');
  int_ok(c14, '\n');
  int_ok(c15, 0);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
movl   $0x0,-0x2c(%rbp)
lea    0xe3e(%rip),%rdi
call   10a0 <title@plt>
lea    0xe42(%rip),%rdi
call   10c0 <test@plt>
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0xe2d(%rip),%rdx
xor    %ecx,%ecx
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
xor    %esi,%esi
movsbl -0x40(%rbp),%edi
call   1030 <int_ok@plt>
lea    0xdf9(%rip),%rdi
call   10c0 <test@plt>
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0xde4(%rip),%rdx
mov    $0x1,%ecx
mov    $0x2,%r8d
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x2,%esi
call   10b0 <size_ok@plt>
mov    $0x1,%esi
movsbl -0x40(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x2,%esi
movsbl -0x3f(%rbp),%edi
call   1030 <int_ok@plt>
lea    0xda0(%rip),%rdi
call   10c0 <test@plt>
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0xd8b(%rip),%rdx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x3,%esi
call   10b0 <size_ok@plt>
mov    $0x3,%esi
movsbl -0x40(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x4,%esi
movsbl -0x3f(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x5,%esi
movsbl -0x3e(%rbp),%edi
call   1030 <int_ok@plt>
lea    0xd36(%rip),%rdi
call   10c0 <test@plt>
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0xd21(%rip),%rdx
mov    $0x6,%ecx
mov    $0x7,%r8d
mov    $0x8,%r9d
movl   $0x9,(%rsp)
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x4,%esi
call   10b0 <size_ok@plt>
mov    $0x6,%esi
movsbl -0x40(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x7,%esi
movsbl -0x3f(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x8,%esi
movsbl -0x3e(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x9,%esi
movsbl -0x3d(%rbp),%edi
call   1030 <int_ok@plt>
lea    0xcb4(%rip),%rdi
call   10c0 <test@plt>
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0xc9f(%rip),%rdx
mov    $0x48,%ecx
mov    $0x65,%r8d
mov    $0x6c,%r9d
xor    %eax,%eax
movl   $0x6c,(%rsp)
movl   $0x6f,0x8(%rsp)
movl   $0x2c,0x10(%rsp)
movl   $0x20,0x18(%rsp)
movl   $0x77,0x20(%rsp)
movl   $0x6f,0x28(%rsp)
movl   $0x72,0x30(%rsp)
movl   $0x6c,0x38(%rsp)
movl   $0x64,0x40(%rsp)
movl   $0x21,0x48(%rsp)
movl   $0xa,0x50(%rsp)
movl   $0x0,0x58(%rsp)
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0xf,%esi
call   10b0 <size_ok@plt>
lea    -0x40(%rbp),%rdi
lea    0xc0d(%rip),%rsi
call   1070 <str_ok@plt>
lea    0xc10(%rip),%rdi
call   10c0 <test@plt>
movb   $0x0,-0x3f(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x1,%esi
lea    0xbd8(%rip),%rdx
mov    $0x64,%ecx
mov    $0x65,%r8d
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
mov    $0x64,%esi
movsbl -0x40(%rbp),%edi
call   1030 <int_ok@plt>
xor    %esi,%esi
movsbl -0x3f(%rbp),%edi
call   1030 <int_ok@plt>
lea    0xbbd(%rip),%rdi
call   10c0 <test@plt>
xor    %eax,%eax
mov    %eax,%edi
xor    %ecx,%ecx
lea    0xb89(%rip),%rdx
mov    %ecx,%esi
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
lea    0xb88(%rip),%rdi
call   10c0 <test@plt>
xor    %eax,%eax
mov    %eax,%edi
xor    %esi,%esi
lea    0xb4e(%rip),%rdx
mov    $0x1,%ecx
mov    $0x2,%r8d
mov    $0x0,%al
call   1080 <snpack@plt>
mov    %rax,-0x48(%rbp)
lea    0xb62(%rip),%rdi
call   10a0 <title@plt>
lea    0xb2c(%rip),%rdi
call   10c0 <test@plt>
lea    -0x50(%rbp),%rdi
mov    $0x14,%esi
lea    0xb17(%rip),%rdx
xor    %ecx,%ecx
mov    $0x0,%al
call   1090 <aspack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
mov    -0x50(%rbp),%rax
xor    %esi,%esi
movsbl (%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rdi
call   1040 <free@plt>
lea    0xad7(%rip),%rdi
call   10c0 <test@plt>
lea    -0x50(%rbp),%rdi
mov    $0x14,%esi
lea    0xac2(%rip),%rdx
mov    $0x1,%ecx
mov    $0x2,%r8d
mov    $0x0,%al
call   1090 <aspack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x2,%esi
call   10b0 <size_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x1,%esi
movsbl (%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x2,%esi
movsbl 0x1(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rdi
call   1040 <free@plt>
lea    0xa6e(%rip),%rdi
call   10c0 <test@plt>
lea    -0x50(%rbp),%rdi
mov    $0x14,%esi
lea    0xa59(%rip),%rdx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
mov    $0x0,%al
call   1090 <aspack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x3,%esi
call   10b0 <size_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x3,%esi
movsbl (%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x4,%esi
movsbl 0x1(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x5,%esi
movsbl 0x2(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rdi
call   1040 <free@plt>
lea    0x9f0(%rip),%rdi
call   10c0 <test@plt>
lea    -0x50(%rbp),%rdi
mov    $0x14,%esi
lea    0x9db(%rip),%rdx
mov    $0x6,%ecx
mov    $0x7,%r8d
mov    $0x8,%r9d
movl   $0x9,(%rsp)
mov    $0x0,%al
call   1090 <aspack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x4,%esi
call   10b0 <size_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x6,%esi
movsbl (%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x7,%esi
movsbl 0x1(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x8,%esi
movsbl 0x2(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x9,%esi
movsbl 0x3(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rdi
call   1040 <free@plt>
lea    0x956(%rip),%rdi
call   10c0 <test@plt>
lea    -0x50(%rbp),%rdi
mov    $0x14,%esi
lea    0x941(%rip),%rdx
mov    $0x48,%ecx
mov    $0x65,%r8d
mov    $0x6c,%r9d
xor    %eax,%eax
movl   $0x6c,(%rsp)
movl   $0x6f,0x8(%rsp)
movl   $0x2c,0x10(%rsp)
movl   $0x20,0x18(%rsp)
movl   $0x77,0x20(%rsp)
movl   $0x6f,0x28(%rsp)
movl   $0x72,0x30(%rsp)
movl   $0x6c,0x38(%rsp)
movl   $0x64,0x40(%rsp)
movl   $0x21,0x48(%rsp)
movl   $0xa,0x50(%rsp)
movl   $0x0,0x58(%rsp)
mov    $0x0,%al
call   1090 <aspack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0xf,%esi
call   10b0 <size_ok@plt>
mov    -0x50(%rbp),%rdi
lea    0x8af(%rip),%rsi
call   1070 <str_ok@plt>
mov    -0x50(%rbp),%rdi
call   1040 <free@plt>
lea    0x8a9(%rip),%rdi
call   10c0 <test@plt>
mov    -0x50(%rbp),%rax
movb   $0x0,0x1(%rax)
lea    -0x50(%rbp),%rdi
mov    $0x1,%esi
lea    0x86d(%rip),%rdx
mov    $0x64,%ecx
mov    $0x65,%r8d
mov    $0x0,%al
call   1090 <aspack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
mov    -0x50(%rbp),%rax
mov    $0x64,%esi
movsbl (%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rax
xor    %esi,%esi
movsbl 0x1(%rax),%edi
call   1030 <int_ok@plt>
mov    -0x50(%rbp),%rdi
call   1040 <free@plt>
lea    0x853(%rip),%rdi
call   10a0 <title@plt>
lea    0x814(%rip),%rdi
call   10c0 <test@plt>
movb   $0x0,-0x40(%rbp)
movb   $0xff,-0x51(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0x7f7(%rip),%rdx
lea    -0x51(%rbp),%rcx
mov    $0x0,%al
call   1060 <snunpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
xor    %esi,%esi
movsbl -0x51(%rbp),%edi
call   1030 <int_ok@plt>
lea    0x7c1(%rip),%rdi
call   10c0 <test@plt>
movb   $0x1,-0x40(%rbp)
movb   $0x2,-0x3f(%rbp)
movb   $0xff,-0x51(%rbp)
movb   $0xff,-0x52(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0x79c(%rip),%rdx
lea    -0x51(%rbp),%rcx
lea    -0x52(%rbp),%r8
mov    $0x0,%al
call   1060 <snunpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x2,%esi
call   10b0 <size_ok@plt>
mov    $0x1,%esi
movsbl -0x51(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x2,%esi
movsbl -0x52(%rbp),%edi
call   1030 <int_ok@plt>
lea    0x75b(%rip),%rdi
call   10c0 <test@plt>
movb   $0x3,-0x40(%rbp)
movb   $0x4,-0x3f(%rbp)
movb   $0x5,-0x3e(%rbp)
movb   $0xff,-0x51(%rbp)
movb   $0xff,-0x52(%rbp)
movb   $0xff,-0x53(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0x72e(%rip),%rdx
lea    -0x51(%rbp),%rcx
lea    -0x52(%rbp),%r8
lea    -0x53(%rbp),%r9
mov    $0x0,%al
call   1060 <snunpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x3,%esi
call   10b0 <size_ok@plt>
mov    $0x3,%esi
movsbl -0x51(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x4,%esi
movsbl -0x52(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x5,%esi
movsbl -0x53(%rbp),%edi
call   1030 <int_ok@plt>
lea    0x6de(%rip),%rdi
call   10c0 <test@plt>
movb   $0x6,-0x40(%rbp)
movb   $0x7,-0x3f(%rbp)
movb   $0x8,-0x3e(%rbp)
movb   $0x9,-0x3d(%rbp)
movb   $0xff,-0x51(%rbp)
movb   $0xff,-0x52(%rbp)
movb   $0xff,-0x53(%rbp)
movb   $0xff,-0x54(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0x6a9(%rip),%rdx
lea    -0x51(%rbp),%rcx
lea    -0x52(%rbp),%r8
lea    -0x53(%rbp),%r9
lea    -0x54(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x0,%al
call   1060 <snunpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0x4,%esi
call   10b0 <size_ok@plt>
mov    $0x6,%esi
movsbl -0x51(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x7,%esi
movsbl -0x52(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x8,%esi
movsbl -0x53(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x9,%esi
movsbl -0x54(%rbp),%edi
call   1030 <int_ok@plt>
lea    0x640(%rip),%rdi
call   10c0 <test@plt>
lea    -0x40(%rbp),%rdi
lea    0x634(%rip),%rsi
call   1050 <strcpy@plt>
movb   $0xff,-0x51(%rbp)
movb   $0xff,-0x52(%rbp)
movb   $0xff,-0x53(%rbp)
movb   $0xff,-0x54(%rbp)
movb   $0xff,-0x55(%rbp)
movb   $0xff,-0x56(%rbp)
movb   $0xff,-0x57(%rbp)
movb   $0xff,-0x58(%rbp)
movb   $0xff,-0x59(%rbp)
movb   $0xff,-0x5a(%rbp)
movb   $0xff,-0x5b(%rbp)
movb   $0xff,-0x5c(%rbp)
movb   $0xff,-0x5d(%rbp)
movb   $0xff,-0x5e(%rbp)
movb   $0xff,-0x5f(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x14,%esi
lea    0x5df(%rip),%rdx
lea    -0x51(%rbp),%rcx
lea    -0x52(%rbp),%r8
lea    -0x53(%rbp),%r9
lea    -0x54(%rbp),%rax
mov    %rax,-0x88(%rbp)
lea    -0x55(%rbp),%rax
mov    %rax,-0x80(%rbp)
lea    -0x56(%rbp),%rax
mov    %rax,-0x78(%rbp)
lea    -0x57(%rbp),%rax
mov    %rax,-0x70(%rbp)
lea    -0x58(%rbp),%r13
lea    -0x59(%rbp),%r12
lea    -0x5a(%rbp),%r15
lea    -0x5b(%rbp),%r14
lea    -0x5c(%rbp),%rbx
lea    -0x5d(%rbp),%r11
lea    -0x5e(%rbp),%r10
lea    -0x5f(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,(%rsp)
mov    -0x80(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0x78(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0x70(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0x68(%rbp),%rax
mov    %r13,0x20(%rsp)
mov    %r12,0x28(%rsp)
mov    %r15,0x30(%rsp)
mov    %r14,0x38(%rsp)
mov    %rbx,0x40(%rsp)
mov    %r11,0x48(%rsp)
mov    %r10,0x50(%rsp)
mov    %rax,0x58(%rsp)
mov    $0x0,%al
call   1060 <snunpack@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
mov    $0xf,%esi
call   10b0 <size_ok@plt>
mov    $0x48,%esi
movsbl -0x51(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x65,%esi
movsbl -0x52(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x6c,%esi
movsbl -0x53(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x6c,%esi
movsbl -0x54(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x6f,%esi
movsbl -0x55(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x2c,%esi
movsbl -0x56(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x20,%esi
movsbl -0x57(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x77,%esi
movsbl -0x58(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x6f,%esi
movsbl -0x59(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x72,%esi
movsbl -0x5a(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x6c,%esi
movsbl -0x5b(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x64,%esi
movsbl -0x5c(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0x21,%esi
movsbl -0x5d(%rbp),%edi
call   1030 <int_ok@plt>
mov    $0xa,%esi
movsbl -0x5e(%rbp),%edi
call   1030 <int_ok@plt>
xor    %esi,%esi
movsbl -0x5f(%rbp),%edi
call   1030 <int_ok@plt>
xor    %eax,%eax
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
lea    0xe4b(%rip),%rdi
call   10a0 <title@plt>
lea    0xe4f(%rip),%r13
mov    %r13,%rdi
call   10c0 <test@plt>
lea    0x20(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %r13,%rdx
xor    %ecx,%ecx
xor    %eax,%eax
call   1080 <snpack@plt>
mov    %rax,%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
movsbl 0x20(%rsp),%edi
xor    %esi,%esi
call   1030 <int_ok@plt>
lea    0xe07(%rip),%r15
mov    %r15,%rdi
call   10c0 <test@plt>
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %r15,%rdx
mov    $0x1,%ecx
mov    $0x2,%r8d
xor    %eax,%eax
call   1080 <snpack@plt>
mov    %rax,%rdi
mov    $0x2,%esi
call   10b0 <size_ok@plt>
movsbl 0x20(%rsp),%edi
mov    $0x1,%esi
call   1030 <int_ok@plt>
movsbl 0x21(%rsp),%edi
mov    $0x2,%esi
call   1030 <int_ok@plt>
lea    0xdb3(%rip),%r12
mov    %r12,%rdi
call   10c0 <test@plt>
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %r12,%rdx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
xor    %eax,%eax
call   1080 <snpack@plt>
mov    %rax,%rdi
mov    $0x3,%esi
call   10b0 <size_ok@plt>
movsbl 0x20(%rsp),%edi
mov    $0x3,%esi
call   1030 <int_ok@plt>
movsbl 0x21(%rsp),%edi
mov    $0x4,%esi
call   1030 <int_ok@plt>
movsbl 0x22(%rsp),%edi
mov    $0x5,%esi
call   1030 <int_ok@plt>
lea    0xd4d(%rip),%rbp
mov    %rbp,%rdi
call   10c0 <test@plt>
sub    $0x8,%rsp
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %rbp,%rdx
mov    $0x6,%ecx
mov    $0x7,%r8d
mov    $0x8,%r9d
xor    %eax,%eax
push   $0x9
call   1080 <snpack@plt>
add    $0x10,%rsp
mov    %rax,%rdi
mov    $0x4,%esi
call   10b0 <size_ok@plt>
movsbl 0x20(%rsp),%edi
mov    $0x6,%esi
call   1030 <int_ok@plt>
movsbl 0x21(%rsp),%edi
mov    $0x7,%esi
call   1030 <int_ok@plt>
movsbl 0x22(%rsp),%edi
mov    $0x8,%esi
call   1030 <int_ok@plt>
movsbl 0x23(%rsp),%edi
mov    $0x9,%esi
call   1030 <int_ok@plt>
lea    0xccb(%rip),%rbp
mov    %rbp,%rdi
call   10c0 <test@plt>
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %rbp,%rdx
mov    $0x48,%ecx
mov    $0x65,%r8d
mov    $0x6c,%r9d
xor    %eax,%eax
push   $0x0
push   $0xa
push   $0x21
push   $0x64
push   $0x6c
push   $0x72
push   $0x6f
push   $0x77
push   $0x20
push   $0x2c
push   $0x6f
push   $0x6c
call   1080 <snpack@plt>
add    $0x60,%rsp
mov    %rax,%rdi
mov    $0xf,%esi
call   10b0 <size_ok@plt>
lea    0xc74(%rip),%rsi
mov    %rbx,%rdi
call   1070 <str_ok@plt>
lea    0xc74(%rip),%rdi
call   10c0 <test@plt>
movb   $0x0,0x21(%rsp)
mov    %rbx,%rdi
mov    $0x1,%esi
mov    %r15,%rdx
mov    $0x64,%ecx
mov    $0x65,%r8d
xor    %eax,%eax
call   1080 <snpack@plt>
mov    %rax,%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
movsbl 0x20(%rsp),%edi
mov    $0x64,%esi
call   1030 <int_ok@plt>
movsbl 0x21(%rsp),%edi
xor    %esi,%esi
call   1030 <int_ok@plt>
lea    0xc28(%rip),%rdi
call   10c0 <test@plt>
xor    %edi,%edi
xor    %esi,%esi
mov    %r13,%rdx
xor    %ecx,%ecx
xor    %eax,%eax
call   1080 <snpack@plt>
mov    %rax,%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
lea    0xbfe(%rip),%rdi
call   10c0 <test@plt>
xor    %edi,%edi
xor    %esi,%esi
mov    %r15,%rdx
mov    $0x1,%ecx
mov    $0x2,%r8d
xor    %eax,%eax
call   1080 <snpack@plt>
lea    0xbe2(%rip),%rdi
call   10a0 <title@plt>
mov    %r13,%rdi
call   10c0 <test@plt>
lea    0x18(%rsp),%r14
mov    %r14,%rdi
mov    $0x14,%esi
mov    %r13,%rdx
xor    %ecx,%ecx
xor    %eax,%eax
call   1090 <aspack@plt>
mov    %rax,%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
mov    0x18(%rsp),%rax
movsbl (%rax),%edi
xor    %esi,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rdi
call   1040 <free@plt>
mov    %r15,%rdi
call   10c0 <test@plt>
mov    %r14,%rdi
mov    $0x14,%esi
mov    %r15,%rdx
mov    $0x1,%ecx
mov    $0x2,%r8d
xor    %eax,%eax
call   1090 <aspack@plt>
mov    %rax,%rdi
mov    $0x2,%esi
call   10b0 <size_ok@plt>
mov    0x18(%rsp),%rax
movsbl (%rax),%edi
mov    $0x1,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x1(%rax),%edi
mov    $0x2,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rdi
call   1040 <free@plt>
mov    %r12,%rdi
call   10c0 <test@plt>
mov    %r14,%rdi
mov    $0x14,%esi
mov    %r12,%rdx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
xor    %eax,%eax
call   1090 <aspack@plt>
mov    %rax,%rdi
mov    $0x3,%esi
call   10b0 <size_ok@plt>
mov    0x18(%rsp),%rax
movsbl (%rax),%edi
mov    $0x3,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x1(%rax),%edi
mov    $0x4,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x2(%rax),%edi
mov    $0x5,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rdi
call   1040 <free@plt>
lea    0xa8c(%rip),%r12
mov    %r12,%rdi
call   10c0 <test@plt>
sub    $0x8,%rsp
mov    %r14,%rdi
mov    $0x14,%esi
mov    %r12,%rdx
mov    $0x6,%ecx
mov    $0x7,%r8d
mov    $0x8,%r9d
xor    %eax,%eax
push   $0x9
call   1090 <aspack@plt>
add    $0x10,%rsp
mov    %rax,%rdi
mov    $0x4,%esi
call   10b0 <size_ok@plt>
mov    0x18(%rsp),%rax
movsbl (%rax),%edi
mov    $0x6,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x1(%rax),%edi
mov    $0x7,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x2(%rax),%edi
mov    $0x8,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x3(%rax),%edi
mov    $0x9,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rdi
call   1040 <free@plt>
mov    %rbp,%rdi
call   10c0 <test@plt>
mov    %r14,%rdi
mov    $0x14,%esi
mov    %rbp,%rdx
mov    $0x48,%ecx
mov    $0x65,%r8d
mov    $0x6c,%r9d
xor    %eax,%eax
push   $0x0
push   $0xa
push   $0x21
push   $0x64
push   $0x6c
push   $0x72
push   $0x6f
push   $0x77
push   $0x20
push   $0x2c
push   $0x6f
push   $0x6c
call   1090 <aspack@plt>
add    $0x60,%rsp
mov    %rax,%rdi
mov    $0xf,%esi
call   10b0 <size_ok@plt>
mov    0x18(%rsp),%rdi
lea    0x99c(%rip),%rsi
call   1070 <str_ok@plt>
mov    0x18(%rsp),%rdi
call   1040 <free@plt>
lea    0x995(%rip),%rdi
call   10c0 <test@plt>
mov    0x18(%rsp),%rax
movb   $0x0,0x1(%rax)
mov    %r14,%rdi
mov    $0x1,%esi
mov    %r15,%rdx
mov    $0x64,%ecx
mov    $0x65,%r8d
xor    %eax,%eax
call   1090 <aspack@plt>
mov    %rax,%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
mov    0x18(%rsp),%rax
movsbl (%rax),%edi
mov    $0x64,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rax
movsbl 0x1(%rax),%edi
xor    %esi,%esi
call   1030 <int_ok@plt>
mov    0x18(%rsp),%rdi
call   1040 <free@plt>
lea    0x945(%rip),%rdi
call   10a0 <title@plt>
mov    %r13,%rdi
call   10c0 <test@plt>
movb   $0x0,0x20(%rsp)
movb   $0xff,0x9(%rsp)
lea    0x9(%rsp),%rbp
mov    %rbx,%r14
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %r13,%rdx
mov    %rbp,%rcx
xor    %eax,%eax
call   1060 <snunpack@plt>
mov    %rax,%rdi
mov    $0x1,%esi
call   10b0 <size_ok@plt>
movsbl 0x9(%rsp),%edi
xor    %esi,%esi
call   1030 <int_ok@plt>
mov    %r15,%rdi
call   10c0 <test@plt>
movw   $0x201,0x20(%rsp)
movb   $0xff,0x9(%rsp)
movb   $0xff,0xa(%rsp)
lea    0xa(%rsp),%r8
mov    %rbx,%rdi
mov    $0x14,%esi
mov    %r15,%rdx
mov    %rbp,%rcx
mov    %r8,%r15
xor    %eax,%eax
call   1060 <snunpack@plt>
mov    %rax,%rdi
mov    $0x2,%esi
call   10b0 <size_ok@plt>
movsbl 0x9(%rsp),%edi
mov    $0x1,%esi
call   1030 <int_ok@plt>
movsbl 0xa(%rsp),%edi
mov    $0x2,%esi
call   1030 <int_ok@plt>
lea    0x859(%rip),%rbx
mov    %rbx,%rdi
call   10c0 <test@plt>
movw   $0x403,0x20(%rsp)
movb   $0x5,0x22(%rsp)
movb   $0xff,0x9(%rsp)
movb   $0xff,0xa(%rsp)
movb   $0xff,0xb(%rsp)
lea    0xb(%rsp),%r13
mov    %r14,%rdi
mov    $0x14,%esi
mov    %rbx,%rdx
mov    %rbp,%rbx
mov    %rbp,%rcx
mov    %r15,%r8
mov    %r13,%r9
xor    %eax,%eax
call   1060 <snunpack@plt>
mov    %rax,%rdi
mov    $0x3,%esi
call   10b0 <size_ok@plt>
movsbl 0x9(%rsp),%edi
mov    $0x3,%esi
call   1030 <int_ok@plt>
movsbl 0xa(%rsp),%edi
mov    $0x4,%esi
call   1030 <int_ok@plt>
movsbl 0xb(%rsp),%edi
mov    $0x5,%esi
call   1030 <int_ok@plt>
mov    %r12,%rdi
call   10c0 <test@plt>
movl   $0x9080706,0x20(%rsp)
09
movb   $0xff,0x9(%rsp)
movb   $0xff,0xa(%rsp)
movb   $0xff,0xb(%rsp)
movb   $0xff,0xc(%rsp)
sub    $0x8,%rsp
lea    0x14(%rsp),%rbp
mov    %r14,%rdi
mov    $0x14,%esi
mov    %r12,%rdx
mov    %rbx,%rcx
mov    %r15,%r8
mov    %r13,%r9
xor    %eax,%eax
push   %rbp
call   1060 <snunpack@plt>
add    $0x10,%rsp
mov    %rax,%rdi
mov    $0x4,%esi
call   10b0 <size_ok@plt>
movsbl 0x9(%rsp),%edi
mov    $0x6,%esi
call   1030 <int_ok@plt>
movsbl 0xa(%rsp),%edi
mov    $0x7,%esi
call   1030 <int_ok@plt>
movsbl 0xb(%rsp),%edi
mov    $0x8,%esi
call   1030 <int_ok@plt>
movsbl 0xc(%rsp),%edi
mov    $0x9,%esi
call   1030 <int_ok@plt>
lea    0x745(%rip),%r12
mov    %r12,%rdi
call   10c0 <test@plt>
mov    %r14,%rdi
lea    0x737(%rip),%rsi
call   1050 <strcpy@plt>
movb   $0xff,0x9(%rsp)
movb   $0xff,0xa(%rsp)
movb   $0xff,0xb(%rsp)
movb   $0xff,0xc(%rsp)
movb   $0xff,0x17(%rsp)
movb   $0xff,0x16(%rsp)
movb   $0xff,0x15(%rsp)
movb   $0xff,0x14(%rsp)
movb   $0xff,0x13(%rsp)
movb   $0xff,0x12(%rsp)
movb   $0xff,0x11(%rsp)
movb   $0xff,0x10(%rsp)
movb   $0xff,0xf(%rsp)
movb   $0xff,0xe(%rsp)
movb   $0xff,0xd(%rsp)
lea    0xd(%rsp),%rbx
lea    0xe(%rsp),%rbp
lea    0xf(%rsp),%r10
lea    0x10(%rsp),%r11
lea    0x11(%rsp),%r15
lea    0x12(%rsp),%r14
lea    0x13(%rsp),%r13
lea    0x20(%rsp),%rdi
lea    0xa(%rsp),%r8
lea    0xb(%rsp),%r9
mov    $0x14,%esi
mov    %r12,%rdx
lea    0x9(%rsp),%rcx
mov    $0x0,%eax
push   %rbx
push   %rbp
push   %r10
push   %r11
push   %r15
push   %r14
push   %r13
lea    0x4c(%rsp),%rbp
push   %rbp
lea    0x55(%rsp),%rbp
push   %rbp
lea    0x5e(%rsp),%rbp
push   %rbp
lea    0x67(%rsp),%rbp
push   %rbp
lea    0x64(%rsp),%rbp
push   %rbp
call   1060 <snunpack@plt>
add    $0x60,%rsp
mov    %rax,%rdi
mov    $0xf,%esi
call   10b0 <size_ok@plt>
movsbl 0x9(%rsp),%edi
mov    $0x48,%esi
call   1030 <int_ok@plt>
movsbl 0xa(%rsp),%edi
mov    $0x65,%esi
call   1030 <int_ok@plt>
movsbl 0xb(%rsp),%edi
mov    $0x6c,%esi
call   1030 <int_ok@plt>
movsbl 0xc(%rsp),%edi
mov    $0x6c,%esi
call   1030 <int_ok@plt>
movsbl 0x17(%rsp),%edi
mov    $0x6f,%esi
call   1030 <int_ok@plt>
movsbl 0x16(%rsp),%edi
mov    $0x2c,%esi
call   1030 <int_ok@plt>
movsbl 0x15(%rsp),%edi
mov    $0x20,%esi
call   1030 <int_ok@plt>
movsbl 0x14(%rsp),%edi
mov    $0x77,%esi
call   1030 <int_ok@plt>
movsbl 0x13(%rsp),%edi
mov    $0x6f,%esi
call   1030 <int_ok@plt>
movsbl 0x12(%rsp),%edi
mov    $0x72,%esi
call   1030 <int_ok@plt>
movsbl 0x11(%rsp),%edi
mov    $0x6c,%esi
call   1030 <int_ok@plt>
movsbl 0x10(%rsp),%edi
mov    $0x64,%esi
call   1030 <int_ok@plt>
movsbl 0xf(%rsp),%edi
mov    $0x21,%esi
call   1030 <int_ok@plt>
movsbl 0xe(%rsp),%edi
mov    $0xa,%esi
call   1030 <int_ok@plt>
movsbl 0xd(%rsp),%edi
xor    %esi,%esi
call   1030 <int_ok@plt>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [9 x i8] c"snpack()\00"
@.str.1 = [2 x i8] c"c\00"
@.str.2 = [3 x i8] c"cc\00"
@.str.3 = [6 x i8] c"c c c\00"
@.str.4 = [3 x i8] c"c4\00"
@.str.5 = [4 x i8] c"c15\00"
@.str.6 = [15 x i8] c"Hello, world!\0A\00"
@.str.7 = [9 x i8] c"cc limit\00"
@.str.8 = [8 x i8] c"c count\00"
@.str.9 = [9 x i8] c"cc count\00"
@.str.10 = [9 x i8] c"aspack()\00"
@.str.11 = [11 x i8] c"snunpack()\00"
define i32 @main() {
%1 = alloca [20 x i8]
%2 = alloca i8*
%3 = alloca i8
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8
%11 = alloca i8
%12 = alloca i8
%13 = alloca i8
%14 = alloca i8
%15 = alloca i8
%16 = alloca i8
%17 = alloca i8
%18 = getelementptr inbounds [20 x i8], [20 x i8]* %1, i64 0, i64 0
%19 = tail call i32 @title(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%20 = tail call i32 @test(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%21 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* %18, i32 20, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 0)
%22 = call i32 @size_ok(i64 %21, i32 1)
%23 = load i8, i8* %18
%24 = call i32 @int_ok(i8 signext %23, i8 signext 0)
%25 = call i32 @test(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%26 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* %18, i32 20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 1, i32 2)
%27 = call i32 @size_ok(i64 %26, i32 2)
%28 = load i8, i8* %18
%29 = call i32 @int_ok(i8 signext %28, i8 signext 1)
%30 = getelementptr inbounds [20 x i8], [20 x i8]* %1, i64 0, i64 1
%31 = load i8, i8* %30
%32 = call i32 @int_ok(i8 signext %31, i8 signext 2)
%33 = call i32 @test(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%34 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* %18, i32 20, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i32 3, i32 4, i32 5)
%35 = call i32 @size_ok(i64 %34, i32 3)
%36 = load i8, i8* %18
%37 = call i32 @int_ok(i8 signext %36, i8 signext 3)
%38 = load i8, i8* %30
%39 = call i32 @int_ok(i8 signext %38, i8 signext 4)
%40 = getelementptr inbounds [20 x i8], [20 x i8]* %1, i64 0, i64 2
%41 = load i8, i8* %40
%42 = call i32 @int_ok(i8 signext %41, i8 signext 5)
%43 = call i32 @test(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
%44 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* %18, i32 20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i32 6, i32 7, i32 8, i32 9)
%45 = call i32 @size_ok(i64 %44, i32 4)
%46 = load i8, i8* %18
%47 = call i32 @int_ok(i8 signext %46, i8 signext 6)
%48 = load i8, i8* %30
%49 = call i32 @int_ok(i8 signext %48, i8 signext 7)
%50 = load i8, i8* %40
%51 = call i32 @int_ok(i8 signext %50, i8 signext 8)
%52 = getelementptr inbounds [20 x i8], [20 x i8]* %1, i64 0, i64 3
%53 = load i8, i8* %52
%54 = call i32 @int_ok(i8 signext %53, i8 signext 9)
%55 = call i32 @test(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%56 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* %18, i32 20, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 72, i32 101, i32 108, i32 108, i32 111, i32 44, i32 32, i32 119, i32 111, i32 114, i32 108, i32 100, i32 33, i32 10, i32 0)
%57 = call i32 @size_ok(i64 %56, i32 15)
%58 = call i32 @str_ok(i8* %18, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.6, i64 0, i64 0))
%59 = call i32 @test(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0))
store i8 0, i8* %30
%60 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* %18, i32 1, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 100, i32 101)
%61 = call i32 @size_ok(i64 %60, i32 1)
%62 = load i8, i8* %18
%63 = call i32 @int_ok(i8 signext %62, i8 signext 100)
%64 = load i8, i8* %30
%65 = call i32 @int_ok(i8 signext %64, i8 signext 0)
%66 = call i32 @test(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.8, i64 0, i64 0))
%67 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* null, i32 0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 0)
%68 = call i32 @size_ok(i64 %67, i32 1)
%69 = call i32 @test(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i64 0, i64 0))
%70 = call i64 (i8*, i32, i8*, i32, ...) @snpack(i8* null, i32 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 1, i32 2)
%71 = call i32 @title(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%72 = bitcast i8** %2 to i8*
%73 = call i32 @test(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%74 = call i64 (i8**, i32, i8*, i32, ...) @aspack(i8** %2, i32 20, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 0)
%75 = call i32 @size_ok(i64 %74, i32 1)
%76 = load i8*, i8** %2
%77 = load i8, i8* %76
%78 = call i32 @int_ok(i8 signext %77, i8 signext 0)
%79 = load i8*, i8** %2
%80 = call i32 @free(i8* %79)
%81 = call i32 @test(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%82 = call i64 (i8**, i32, i8*, i32, ...) @aspack(i8** %2, i32 20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 1, i32 2)
%83 = call i32 @size_ok(i64 %82, i32 2)
%84 = load i8*, i8** %2
%85 = load i8, i8* %84
%86 = call i32 @int_ok(i8 signext %85, i8 signext 1)
%87 = load i8*, i8** %2
%88 = getelementptr inbounds i8, i8* %87, i64 1
%89 = load i8, i8* %88
%90 = call i32 @int_ok(i8 signext %89, i8 signext 2)
%91 = load i8*, i8** %2
%92 = call i32 @free(i8* %91)
%93 = call i32 @test(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%94 = call i64 (i8**, i32, i8*, i32, ...) @aspack(i8** %2, i32 20, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i32 3, i32 4, i32 5)
%95 = call i32 @size_ok(i64 %94, i32 3)
%96 = load i8*, i8** %2
%97 = load i8, i8* %96
%98 = call i32 @int_ok(i8 signext %97, i8 signext 3)
%99 = load i8*, i8** %2
%100 = getelementptr inbounds i8, i8* %99, i64 1
%101 = load i8, i8* %100
%102 = call i32 @int_ok(i8 signext %101, i8 signext 4)
%103 = load i8*, i8** %2
%104 = getelementptr inbounds i8, i8* %103, i64 2
%105 = load i8, i8* %104
%106 = call i32 @int_ok(i8 signext %105, i8 signext 5)
%107 = load i8*, i8** %2
%108 = call i32 @free(i8* %107)
%109 = call i32 @test(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
%110 = call i64 (i8**, i32, i8*, i32, ...) @aspack(i8** %2, i32 20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i32 6, i32 7, i32 8, i32 9)
%111 = call i32 @size_ok(i64 %110, i32 4)
%112 = load i8*, i8** %2
%113 = load i8, i8* %112
%114 = call i32 @int_ok(i8 signext %113, i8 signext 6)
%115 = load i8*, i8** %2
%116 = getelementptr inbounds i8, i8* %115, i64 1
%117 = load i8, i8* %116
%118 = call i32 @int_ok(i8 signext %117, i8 signext 7)
%119 = load i8*, i8** %2
%120 = getelementptr inbounds i8, i8* %119, i64 2
%121 = load i8, i8* %120
%122 = call i32 @int_ok(i8 signext %121, i8 signext 8)
%123 = load i8*, i8** %2
%124 = getelementptr inbounds i8, i8* %123, i64 3
%125 = load i8, i8* %124
%126 = call i32 @int_ok(i8 signext %125, i8 signext 9)
%127 = load i8*, i8** %2
%128 = call i32 @free(i8* %127)
%129 = call i32 @test(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%130 = call i64 (i8**, i32, i8*, i32, ...) @aspack(i8** %2, i32 20, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 72, i32 101, i32 108, i32 108, i32 111, i32 44, i32 32, i32 119, i32 111, i32 114, i32 108, i32 100, i32 33, i32 10, i32 0)
%131 = call i32 @size_ok(i64 %130, i32 15)
%132 = load i8*, i8** %2
%133 = call i32 @str_ok(i8* %132, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.6, i64 0, i64 0))
%134 = load i8*, i8** %2
%135 = call i32 @free(i8* %134)
%136 = call i32 @test(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0))
%137 = load i8*, i8** %2
%138 = getelementptr inbounds i8, i8* %137, i64 1
store i8 0, i8* %138
%139 = call i64 (i8**, i32, i8*, i32, ...) @aspack(i8** %2, i32 1, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 100, i32 101)
%140 = call i32 @size_ok(i64 %139, i32 1)
%141 = load i8*, i8** %2
%142 = load i8, i8* %141
%143 = call i32 @int_ok(i8 signext %142, i8 signext 100)
%144 = load i8*, i8** %2
%145 = getelementptr inbounds i8, i8* %144, i64 1
%146 = load i8, i8* %145
%147 = call i32 @int_ok(i8 signext %146, i8 signext 0)
%148 = load i8*, i8** %2
%149 = call i32 @free(i8* %148)
%150 = call i32 @title(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i64 0, i64 0))
%151 = call i32 @test(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i8 0, i8* %18
store i8 -1, i8* %3
%152 = call i64 (i8*, i32, i8*, i8*, ...) @snunpack(i8* %18, i32 20, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i8* %3)
%153 = call i32 @size_ok(i64 %152, i32 1)
%154 = load i8, i8* %3
%155 = call i32 @int_ok(i8 signext %154, i8 signext 0)
%156 = call i32 @test(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
store i8 1, i8* %18
store i8 2, i8* %30
store i8 -1, i8* %3
store i8 -1, i8* %4
%157 = call i64 (i8*, i32, i8*, i8*, ...) @snunpack(i8* %18, i32 20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8* %3, i8* %4)
%158 = call i32 @size_ok(i64 %157, i32 2)
%159 = load i8, i8* %3
%160 = call i32 @int_ok(i8 signext %159, i8 signext 1)
%161 = load i8, i8* %4
%162 = call i32 @int_ok(i8 signext %161, i8 signext 2)
%163 = call i32 @test(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
store i8 3, i8* %18
store i8 4, i8* %30
store i8 5, i8* %40
store i8 -1, i8* %3
store i8 -1, i8* %4
store i8 -1, i8* %5
%164 = call i64 (i8*, i32, i8*, i8*, ...) @snunpack(i8* %18, i32 20, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0), i8* %3, i8* %4, i8* %5)
%165 = call i32 @size_ok(i64 %164, i32 3)
%166 = load i8, i8* %3
%167 = call i32 @int_ok(i8 signext %166, i8 signext 3)
%168 = load i8, i8* %4
%169 = call i32 @int_ok(i8 signext %168, i8 signext 4)
%170 = load i8, i8* %5
%171 = call i32 @int_ok(i8 signext %170, i8 signext 5)
%172 = call i32 @test(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
store i8 6, i8* %18
store i8 7, i8* %30
store i8 8, i8* %40
store i8 9, i8* %52
store i8 -1, i8* %3
store i8 -1, i8* %4
store i8 -1, i8* %5
store i8 -1, i8* %6
%173 = call i64 (i8*, i32, i8*, i8*, ...) @snunpack(i8* %18, i32 20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i8* %3, i8* %4, i8* %5, i8* %6)
%174 = call i32 @size_ok(i64 %173, i32 4)
%175 = load i8, i8* %3
%176 = call i32 @int_ok(i8 signext %175, i8 signext 6)
%177 = load i8, i8* %4
%178 = call i32 @int_ok(i8 signext %177, i8 signext 7)
%179 = load i8, i8* %5
%180 = call i32 @int_ok(i8 signext %179, i8 signext 8)
%181 = load i8, i8* %6
%182 = call i32 @int_ok(i8 signext %181, i8 signext 9)
%183 = call i32 @test(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%184 = call i32 @strcpy(i8* %18, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.6, i64 0, i64 0))
store i8 -1, i8* %3
store i8 -1, i8* %4
store i8 -1, i8* %5
store i8 -1, i8* %6
store i8 -1, i8* %7
store i8 -1, i8* %8
store i8 -1, i8* %9
store i8 -1, i8* %10
store i8 -1, i8* %11
store i8 -1, i8* %12
store i8 -1, i8* %13
store i8 -1, i8* %14
store i8 -1, i8* %15
store i8 -1, i8* %16
store i8 -1, i8* %17
%185 = call i64 (i8*, i32, i8*, i8*, ...) @snunpack(i8* %18, i32 20, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i8* %3, i8* %4, i8* %5, i8* %6, i8* %7, i8* %8, i8* %9, i8* %10, i8* %11, i8* %12, i8* %13, i8* %14, i8* %15, i8* %16, i8* %17)
%186 = call i32 @size_ok(i64 %185, i32 15)
%187 = load i8, i8* %3
%188 = call i32 @int_ok(i8 signext %187, i8 signext 72)
%189 = load i8, i8* %4
%190 = call i32 @int_ok(i8 signext %189, i8 signext 101)
%191 = load i8, i8* %5
%192 = call i32 @int_ok(i8 signext %191, i8 signext 108)
%193 = load i8, i8* %6
%194 = call i32 @int_ok(i8 signext %193, i8 signext 108)
%195 = load i8, i8* %7
%196 = call i32 @int_ok(i8 signext %195, i8 signext 111)
%197 = load i8, i8* %8
%198 = call i32 @int_ok(i8 signext %197, i8 signext 44)
%199 = load i8, i8* %9
%200 = call i32 @int_ok(i8 signext %199, i8 signext 32)
%201 = load i8, i8* %10
%202 = call i32 @int_ok(i8 signext %201, i8 signext 119)
%203 = load i8, i8* %11
%204 = call i32 @int_ok(i8 signext %203, i8 signext 111)
%205 = load i8, i8* %12
%206 = call i32 @int_ok(i8 signext %205, i8 signext 114)
%207 = load i8, i8* %13
%208 = call i32 @int_ok(i8 signext %207, i8 signext 108)
%209 = load i8, i8* %14
%210 = call i32 @int_ok(i8 signext %209, i8 signext 100)
%211 = load i8, i8* %15
%212 = call i32 @int_ok(i8 signext %211, i8 signext 33)
%213 = load i8, i8* %16
%214 = call i32 @int_ok(i8 signext %213, i8 signext 10)
%215 = load i8, i8* %17
%216 = call i32 @int_ok(i8 signext %215, i8 signext 0)
ret i32 0
}