#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*/ printf(char *, ...);
int /*<<< orphan*/ putchar(char);
void copyright(int start, int end) {
  printf("\nThe MIT License (MIT)\n\n");
  printf("Copyright (c) Stuart Boutell %4d", start);
  if (start == end)
    putchar('.');
  else
    printf("-%4d.\n\n", end);
  printf("Permission is hereby granted, free of charge, to any person "
         "obtaining a copy of\n");
  printf("this software and associated documentation files (the \"Software\"), "
         "to deal in\n");
  printf("the Software without restriction, including without limitation the "
         "rights to\n");
  printf("use, copy, modify, merge, publish, distribute, sublicense, and/or "
         "sell copies of\n");
  printf("the Software, and to permit persons to whom the Software is "
         "furnished to do so,\n");
  printf("subject to the following conditions:\n");
  printf("\n");
  printf("The above copyright notice and this permission notice shall be "
         "included in all\n");
  printf("copies or substantial portions of the Software.\n");
  printf("\n");
  printf("THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, "
         "EXPRESS OR\n");
  printf("IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF "
         "MERCHANTABILITY, FITNESS\n");
  printf("FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE "
         "AUTHORS OR\n");
  printf("COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER "
         "LIABILITY, WHETHER\n");
  printf("IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR "
         "IN\n");
  printf("CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE "
         "SOFTWARE.\n\n");
}


x86 assembly (clang, -O0):
<copyright>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
lea    0xecb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x4(%rbp),%esi
lea    0xed3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    1168 <copyright+0x48>
mov    $0x2e,%edi
call   1030 <putchar@plt>
jmp    1179 <copyright+0x59>
mov    -0x8(%rbp),%esi
lea    0xec8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xec2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf05(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf46(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf86(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xfca(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x100d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe43(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1017(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1059(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe19(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x106e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x10ac(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x10f0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1132(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1174(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x11af(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<copyright>:
push   %rbp
push   %rbx
push   %rax
mov    %esi,%ebx
mov    %edi,%ebp
lea    0xeeb(%rip),%rdi
call   1040 <puts@plt>
lea    0xeb6(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1050 <printf@plt>
cmp    %ebx,%ebp
jne    1163 <copyright+0x33>
mov    $0x2e,%edi
call   1030 <putchar@plt>
jmp    1173 <copyright+0x43>
lea    0xeb7(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xec7(%rip),%rdi
call   1040 <puts@plt>
lea    0xf0b(%rip),%rdi
call   1040 <puts@plt>
lea    0xf4d(%rip),%rdi
call   1040 <puts@plt>
lea    0xf8e(%rip),%rdi
call   1040 <puts@plt>
lea    0xfd3(%rip),%rdi
call   1040 <puts@plt>
lea    0x1017(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1026(%rip),%rdi
call   1040 <puts@plt>
lea    0x1069(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1083(%rip),%rdi
call   1040 <puts@plt>
lea    0x10c2(%rip),%rdi
call   1040 <puts@plt>
lea    0x1107(%rip),%rdi
call   1040 <puts@plt>
lea    0x114a(%rip),%rdi
call   1040 <puts@plt>
lea    0x118d(%rip),%rdi
call   1040 <puts@plt>
lea    0x11c9(%rip),%rdi
add    $0x8,%rsp
pop    %rbx
pop    %rbp
jmp    1040 <puts@plt>

LLVM IR (-O0):
@.str = [25 x i8] c"\0AThe MIT License (MIT)\0A\0A\00"
@.str.1 = [33 x i8] c"Copyright (c) Stuart Boutell %4d\00"
@.str.2 = [8 x i8] c"-%4d.\0A\0A\00"
@.str.3 = [81 x i8] c"Permission is hereby granted, free of charge, to any person obtaining a copy of\0A\00"
@.str.4 = [79 x i8] c"this software and associated documentation files (the \22Software\22), to deal in\0A\00"
@.str.5 = [78 x i8] c"the Software without restriction, including without limitation the rights to\0A\00"
@.str.6 = [82 x i8] c"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\0A\00"
@.str.7 = [81 x i8] c"the Software, and to permit persons to whom the Software is furnished to do so,\0A\00"
@.str.8 = [38 x i8] c"subject to the following conditions:\0A\00"
@.str.9 = [2 x i8] c"\0A\00"
@.str.10 = [80 x i8] c"The above copyright notice and this permission notice shall be included in all\0A\00"
@.str.11 = [49 x i8] c"copies or substantial portions of the Software.\0A\00"
@.str.12 = [76 x i8] c"THE SOFTWARE IS PROVIDED \22AS IS\22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\0A\00"
@.str.13 = [82 x i8] c"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\0A\00"
@.str.14 = [80 x i8] c"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\0A\00"
@.str.15 = [80 x i8] c"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\0A\00"
@.str.16 = [73 x i8] c"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\0A\00"
@.str.17 = [77 x i8] c"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\0A\0A\00"
define void @copyright(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str, i64 0, i64 0))
%6 = load i32, i32* %3
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.1, i64 0, i64 0), i32 %6)
%8 = load i32, i32* %3
%9 = load i32, i32* %4
%10 = icmp eq i32 %8, %9
br i1 %10, label %11, label %13
11: ; preds = %2
%12 = call i32 @putchar(i8 signext 46)
br label %16
13: ; preds = %2
%14 = load i32, i32* %4
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i32 %14)
br label %16
16: ; preds = %13, %11
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.3, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.4, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.5, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.6, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.7, i64 0, i64 0))
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.10, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.11, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.12, i64 0, i64 0))
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.13, i64 0, i64 0))
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.14, i64 0, i64 0))
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.15, i64 0, i64 0))
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.16, i64 0, i64 0))
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.17, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str.1 = [33 x i8] c"Copyright (c) Stuart Boutell %4d\00"
@.str.2 = [8 x i8] c"-%4d.\0A\0A\00"
@str = [24 x i8] c"\0AThe MIT License (MIT)\0A\00"
@str.18 = [80 x i8] c"Permission is hereby granted, free of charge, to any person obtaining a copy of\00"
@str.19 = [78 x i8] c"this software and associated documentation files (the \22Software\22), to deal in\00"
@str.20 = [77 x i8] c"the Software without restriction, including without limitation the rights to\00"
@str.21 = [81 x i8] c"use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\00"
@str.22 = [80 x i8] c"the Software, and to permit persons to whom the Software is furnished to do so,\00"
@str.23 = [37 x i8] c"subject to the following conditions:\00"
@str.24 = [79 x i8] c"The above copyright notice and this permission notice shall be included in all\00"
@str.25 = [48 x i8] c"copies or substantial portions of the Software.\00"
@str.26 = [75 x i8] c"THE SOFTWARE IS PROVIDED \22AS IS\22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\00"
@str.27 = [81 x i8] c"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\00"
@str.28 = [79 x i8] c"FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\00"
@str.29 = [79 x i8] c"COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\00"
@str.30 = [72 x i8] c"IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\00"
@str.31 = [76 x i8] c"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\0A\00"
define void @copyright(i32 %0, i32 %1) {
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str, i64 0, i64 0))
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.1, i64 0, i64 0), i32 %0)
%5 = icmp eq i32 %0, %1
br i1 %5, label %6, label %8
6: ; preds = %2
%7 = tail call i32 @putchar(i8 signext 46)
br label %10
8: ; preds = %2
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i32 %1)
br label %10
10: ; preds = %8, %6
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.18, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @str.19, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.20, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.21, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.22, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.23, i64 0, i64 0))
%17 = tail call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.24, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @str.25, i64 0, i64 0))
%20 = tail call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.26, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.27, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.28, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.29, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.30, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.31, i64 0, i64 0))
ret void
}