#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 */
scalar_t__ calloc(int, int);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
char *genAboutString() {
  char *progName = "Finite Element Solver";
  char *version = "0.06";
  char *sourceURL = "https://github.com/mirrorscotty/fe-solver/";
  char *copyrightYear = "2012";
  char *author = "Alex Griessman";
  char *email = "agriessm@purdue.edu";
  char *license =
      "Redistribution and use in source and binary forms, with or without "
      "modification, are permitted provided that the following conditions are "
      "met: "
      "<ul>"
      "<li>Redistributions of source code must retain the above copyright "
      "notice, this list of conditions and the following disclaimer.</li>"
      "<li>Redistributions in binary form must reproduce the above copyright "
      "notice, this list of conditions and the following disclaimer in the "
      "documentation and/or other materials provided with the "
      "distribution.</li>"
      "<li>Neither the name of Purdue University nor the "
      "names of its contributors may be used to endorse or promote products "
      "derived from this software without specific prior written "
      "permission.</li>"
      "</ul>"
      "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "
      "\"AS IS\" AND "
      "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE "
      "IMPLIED "
      "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE "
      "DISCLAIMED. IN NO EVENT SHALL Alex Griessman BE LIABLE FOR ANY "
      "DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL "
      "DAMAGES "
      "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR "
      "SERVICES; "
      "LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED "
      "AND "
      "ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR "
      "TORT "
      "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE "
      "OF THIS "
      "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
  char *result;
  int length = strlen(progName) + strlen(version) + strlen(sourceURL) +
               strlen(copyrightYear) + strlen(author) + strlen(email) +
               strlen(license) + 400;
  result = (char *)calloc(length, sizeof(char));
  strcpy(result, "<b>");
  strcat(result, progName);
  strcat(result, " Version ");
  strcat(result, version);
  strcat(result, "</b> ");
  strcat(result, "<br/>");
  strcat(result,
         "The source code for this program may be downloaded from <a href=\"");
  strcat(result, sourceURL);
  strcat(result, "\">");
  strcat(result, sourceURL);
  strcat(result, "</a>");
  strcat(result, "<br/>");
  strcat(result, "<br/>");
  strcat(result, "Copyright (c) ");
  strcat(result, copyrightYear);
  strcat(result, ", ");
  strcat(result, author);
  strcat(result, " (<a href=\"");
  strcat(result, email);
  strcat(result, "\">");
  strcat(result, email);
  strcat(result, "</a>)");
  strcat(result, "<br/>");
  strcat(result, "All rights reserved.");
  strcat(result, "<br/>");
  strcat(result, "<hr/>");
  strcat(result, "<br/>");
  strcat(result, license);
  return result;
}


x86 assembly (clang, -O0):
<genAboutString>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
lea    0xeb1(%rip),%rax
mov    %rax,-0x8(%rbp)
lea    0xebc(%rip),%rax
mov    %rax,-0x10(%rbp)
lea    0xeb6(%rip),%rax
mov    %rax,-0x18(%rbp)
lea    0xed6(%rip),%rax
mov    %rax,-0x20(%rbp)
lea    0xed0(%rip),%rax
mov    %rax,-0x28(%rbp)
lea    0xed4(%rip),%rax
mov    %rax,-0x30(%rbp)
lea    0xedd(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,-0x5c(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x5c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x58(%rbp)
mov    -0x18(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x58(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x20(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x54(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x50(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x30(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x4c(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x48(%rbp),%eax
add    %ecx,%eax
add    $0x190,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
lea    0x13c9(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x40(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x13b0(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x139d(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1393(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1389(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x13ae(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1394(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1339(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1329(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1369(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x135b(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1341(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x130a(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1313(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1295(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x12f9(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1275(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x12ee(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
lea    0x1255(%rip),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rdi
mov    -0x38(%rbp),%rsi
call   1060 <strcat@plt>
mov    -0x40(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<genAboutString>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
lea    0xeae(%rip),%rdi
call   1040 <strlen@plt>
mov    %eax,%r13d
lea    0xeb5(%rip),%rdi
call   1040 <strlen@plt>
mov    %eax,%ebx
lea    0xeac(%rip),%rdi
call   1040 <strlen@plt>
mov    %eax,%r15d
lea    0xec8(%rip),%rdi
call   1040 <strlen@plt>
mov    %eax,%ebp
lea    0xebf(%rip),%rdi
call   1040 <strlen@plt>
mov    %eax,%r14d
lea    0xebf(%rip),%rdi
call   1040 <strlen@plt>
mov    %eax,%r12d
lea    0xec4(%rip),%rdi
call   1040 <strlen@plt>
add    %r13d,%ebx
add    %r15d,%ebx
add    %ebp,%ebx
add    %r14d,%ebx
add    %r12d,%ebx
lea    (%rax,%rbx,1),%edi
add    $0x190,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,%rbx
lea    0x1423(%rip),%rsi
mov    %rax,%rdi
call   1030 <strcpy@plt>
mov    %rbx,%rdi
lea    0xe14(%rip),%rsi
call   1060 <strcat@plt>
lea    0x1409(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
lea    0xe0c(%rip),%rsi
call   1060 <strcat@plt>
lea    0x13f5(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
lea    0x13ec(%rip),%r14
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcat@plt>
lea    0x13e0(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
lea    0xdd2(%rip),%rbp
mov    %rbp,%rsi
call   1060 <strcat@plt>
lea    0x1401(%rip),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1060 <strcat@plt>
lea    0x13e7(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcat@plt>
lea    0x13c7(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
lea    0xd9a(%rip),%rsi
call   1060 <strcat@plt>
lea    0x13b8(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
lea    0xd81(%rip),%rsi
call   1060 <strcat@plt>
lea    0x139d(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
lea    0xd72(%rip),%rbp
mov    %rbp,%rsi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1060 <strcat@plt>
lea    0x1372(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcat@plt>
lea    0x135e(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcat@plt>
lea    0x1359(%rip),%rsi
mov    %rbx,%rdi
call   1060 <strcat@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcat@plt>
mov    %rbx,%rdi
lea    0xd10(%rip),%rsi
call   1060 <strcat@plt>
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [22 x i8] c"Finite Element Solver\00"
@.str.1 = [5 x i8] c"0.06\00"
@.str.2 = [43 x i8] c"https://github.com/mirrorscotty/fe-solver/\00"
@.str.3 = [5 x i8] c"2012\00"
@.str.4 = [15 x i8] c"Alex Griessman\00"
@.str.5 = [20 x i8] c"agriessm@purdue.edu\00"
@.str.6 = [1423 x i8] c"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: <ul><li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li><li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li><li>Neither the name of Purdue University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.</li></ul>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \22AS IS\22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Alex Griessman BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\00"
@.str.7 = [4 x i8] c"<b>\00"
@.str.8 = [10 x i8] c" Version \00"
@.str.9 = [6 x i8] c"</b> \00"
@.str.10 = [6 x i8] c"<br/>\00"
@.str.11 = [66 x i8] c"The source code for this program may be downloaded from <a href=\22\00"
@.str.12 = [3 x i8] c"\22>\00"
@.str.13 = [5 x i8] c"</a>\00"
@.str.14 = [15 x i8] c"Copyright (c) \00"
@.str.15 = [3 x i8] c", \00"
@.str.16 = [12 x i8] c" (<a href=\22\00"
@.str.17 = [6 x i8] c"</a>)\00"
@.str.18 = [21 x i8] c"All rights reserved.\00"
@.str.19 = [6 x i8] c"<hr/>\00"
define i8* @genAboutString() {
%1 = alloca i8*
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32
store i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), i8** %1
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8** %2
store i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0), i8** %3
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i8** %4
store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.4, i64 0, i64 0), i8** %5
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i8** %6
store i8* getelementptr inbounds ([1423 x i8], [1423 x i8]* @.str.6, i64 0, i64 0), i8** %7
%10 = load i8*, i8** %1
%11 = call i32 @strlen(i8* %10)
%12 = load i8*, i8** %2
%13 = call i32 @strlen(i8* %12)
%14 = add nsw i32 %11, %13
%15 = load i8*, i8** %3
%16 = call i32 @strlen(i8* %15)
%17 = add nsw i32 %14, %16
%18 = load i8*, i8** %4
%19 = call i32 @strlen(i8* %18)
%20 = add nsw i32 %17, %19
%21 = load i8*, i8** %5
%22 = call i32 @strlen(i8* %21)
%23 = add nsw i32 %20, %22
%24 = load i8*, i8** %6
%25 = call i32 @strlen(i8* %24)
%26 = add nsw i32 %23, %25
%27 = load i8*, i8** %7
%28 = call i32 @strlen(i8* %27)
%29 = add nsw i32 %26, %28
%30 = add nsw i32 %29, 400
store i32 %30, i32* %9
%31 = load i32, i32* %9
%32 = call i64 @calloc(i32 %31, i32 1)
%33 = inttoptr i64 %32 to i8*
store i8* %33, i8** %8
%34 = load i8*, i8** %8
%35 = call i32 @strcpy(i8* %34, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
%36 = load i8*, i8** %8
%37 = load i8*, i8** %1
%38 = call i32 @strcat(i8* %36, i8* %37)
%39 = load i8*, i8** %8
%40 = call i32 @strcat(i8* %39, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0))
%41 = load i8*, i8** %8
%42 = load i8*, i8** %2
%43 = call i32 @strcat(i8* %41, i8* %42)
%44 = load i8*, i8** %8
%45 = call i32 @strcat(i8* %44, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
%46 = load i8*, i8** %8
%47 = call i32 @strcat(i8* %46, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%48 = load i8*, i8** %8
%49 = call i32 @strcat(i8* %48, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.11, i64 0, i64 0))
%50 = load i8*, i8** %8
%51 = load i8*, i8** %3
%52 = call i32 @strcat(i8* %50, i8* %51)
%53 = load i8*, i8** %8
%54 = call i32 @strcat(i8* %53, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%55 = load i8*, i8** %8
%56 = load i8*, i8** %3
%57 = call i32 @strcat(i8* %55, i8* %56)
%58 = load i8*, i8** %8
%59 = call i32 @strcat(i8* %58, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0))
%60 = load i8*, i8** %8
%61 = call i32 @strcat(i8* %60, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%62 = load i8*, i8** %8
%63 = call i32 @strcat(i8* %62, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%64 = load i8*, i8** %8
%65 = call i32 @strcat(i8* %64, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.14, i64 0, i64 0))
%66 = load i8*, i8** %8
%67 = load i8*, i8** %4
%68 = call i32 @strcat(i8* %66, i8* %67)
%69 = load i8*, i8** %8
%70 = call i32 @strcat(i8* %69, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0))
%71 = load i8*, i8** %8
%72 = load i8*, i8** %5
%73 = call i32 @strcat(i8* %71, i8* %72)
%74 = load i8*, i8** %8
%75 = call i32 @strcat(i8* %74, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.16, i64 0, i64 0))
%76 = load i8*, i8** %8
%77 = load i8*, i8** %6
%78 = call i32 @strcat(i8* %76, i8* %77)
%79 = load i8*, i8** %8
%80 = call i32 @strcat(i8* %79, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%81 = load i8*, i8** %8
%82 = load i8*, i8** %6
%83 = call i32 @strcat(i8* %81, i8* %82)
%84 = load i8*, i8** %8
%85 = call i32 @strcat(i8* %84, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0))
%86 = load i8*, i8** %8
%87 = call i32 @strcat(i8* %86, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%88 = load i8*, i8** %8
%89 = call i32 @strcat(i8* %88, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.18, i64 0, i64 0))
%90 = load i8*, i8** %8
%91 = call i32 @strcat(i8* %90, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%92 = load i8*, i8** %8
%93 = call i32 @strcat(i8* %92, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0))
%94 = load i8*, i8** %8
%95 = call i32 @strcat(i8* %94, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%96 = load i8*, i8** %8
%97 = load i8*, i8** %7
%98 = call i32 @strcat(i8* %96, i8* %97)
%99 = load i8*, i8** %8
ret i8* %99
}

LLVM IR (-O2):
@.str = [22 x i8] c"Finite Element Solver\00"
@.str.1 = [5 x i8] c"0.06\00"
@.str.2 = [43 x i8] c"https://github.com/mirrorscotty/fe-solver/\00"
@.str.3 = [5 x i8] c"2012\00"
@.str.4 = [15 x i8] c"Alex Griessman\00"
@.str.5 = [20 x i8] c"agriessm@purdue.edu\00"
@.str.6 = [1423 x i8] c"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: <ul><li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li><li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li><li>Neither the name of Purdue University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.</li></ul>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \22AS IS\22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Alex Griessman BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\00"
@.str.7 = [4 x i8] c"<b>\00"
@.str.8 = [10 x i8] c" Version \00"
@.str.9 = [6 x i8] c"</b> \00"
@.str.10 = [6 x i8] c"<br/>\00"
@.str.11 = [66 x i8] c"The source code for this program may be downloaded from <a href=\22\00"
@.str.12 = [3 x i8] c"\22>\00"
@.str.13 = [5 x i8] c"</a>\00"
@.str.14 = [15 x i8] c"Copyright (c) \00"
@.str.15 = [3 x i8] c", \00"
@.str.16 = [12 x i8] c" (<a href=\22\00"
@.str.17 = [6 x i8] c"</a>)\00"
@.str.18 = [21 x i8] c"All rights reserved.\00"
@.str.19 = [6 x i8] c"<hr/>\00"
define i8* @genAboutString() {
%1 = tail call i32 @strlen(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @strlen(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @strlen(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.4, i64 0, i64 0))
%6 = tail call i32 @strlen(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0))
%7 = tail call i32 @strlen(i8* getelementptr inbounds ([1423 x i8], [1423 x i8]* @.str.6, i64 0, i64 0))
%8 = add i32 %1, 400
%9 = add i32 %8, %2
%10 = add i32 %9, %3
%11 = add i32 %10, %4
%12 = add i32 %11, %5
%13 = add i32 %12, %6
%14 = add i32 %13, %7
%15 = tail call i64 @calloc(i32 %14, i32 1)
%16 = inttoptr i64 %15 to i8*
%17 = tail call i32 @strcpy(i8* %16, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
%18 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0))
%19 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0))
%20 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
%21 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
%22 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%23 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.11, i64 0, i64 0))
%24 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0))
%25 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%26 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0))
%27 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.13, i64 0, i64 0))
%28 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%29 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%30 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.14, i64 0, i64 0))
%31 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%32 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0))
%33 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.4, i64 0, i64 0))
%34 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.16, i64 0, i64 0))
%35 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0))
%36 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%37 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0))
%38 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0))
%39 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%40 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.18, i64 0, i64 0))
%41 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%42 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0))
%43 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
%44 = tail call i32 @strcat(i8* %16, i8* getelementptr inbounds ([1423 x i8], [1423 x i8]* @.str.6, i64 0, i64 0))
ret i8* %16
}