// File: pranavmodx[P]modlang/main.cpp
// Function: readFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
std::string readFile(const std::string &fileName)
{
	std::ifstream fin(fileName.c_str(), std::ios::binary | std::ios::ate);

	if (!fin) {
		std::cerr << "error: could not open the file" << std::endl;
		return "";
	}

	std::ifstream::pos_type fileSize = fin.tellg();
	fin.seekg(0, std::ios::beg);

	std::vector<char> bytes(fileSize);
	fin.read(bytes.data(), fileSize);
	fin.close();

	return std::string(bytes.data(), fileSize);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movq %rdi, -0x278(%rbp)
movq %rdi, %rax
movq %rax, -0x270(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x6130
movq %rax, -0x268(%rbp)
movl $0x4, %edi
movl $0x2, %esi
callq 0x14a10
movq -0x268(%rbp), %rsi
movl %eax, %edx
leaq -0x218(%rbp), %rdi
callq 0x6540
movq -0x218(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x218(%rbp,%rax), %rdi
callq 0x6170
movb %al, -0x25b(%rbp)
jmp 0x141d8
movb -0x25b(%rbp), %al
testb $0x1, %al
jne 0x141e7
jmp 0x1429c
movq 0x51e02(%rip), %rdi     # 0x65ff0
leaq 0x32ef5(%rip), %rsi     # 0x470ea
callq 0x62b0
movq %rax, -0x280(%rbp)
jmp 0x14203
movq -0x280(%rbp), %rdi
movq 0x51d87(%rip), %rsi     # 0x65f98
callq 0x62f0
jmp 0x14218
leaq -0x225(%rbp), %rdi
movq %rdi, -0x288(%rbp)
callq 0x6520
movq -0x278(%rbp), %rdi
movq -0x288(%rbp), %rdx
leaq 0x337ce(%rip), %rsi     # 0x47a0e
callq 0x14960
jmp 0x14247
leaq -0x225(%rbp), %rdi
callq 0x6310
movl $0x1, -0x22c(%rbp)
jmp 0x1446a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
jmp 0x14486
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
leaq -0x225(%rbp), %rdi
callq 0x6310
jmp 0x14486
leaq -0x218(%rbp), %rdi
callq 0x6500
movq %rdx, -0x298(%rbp)
movq %rax, -0x290(%rbp)
jmp 0x142b8
movq -0x298(%rbp), %rax
movq -0x290(%rbp), %rcx
movq %rcx, -0x240(%rbp)
movq %rax, -0x238(%rbp)
xorl %edx, %edx
movl %edx, %esi
leaq -0x218(%rbp), %rdi
callq 0x63f0
jmp 0x142e6
leaq -0x240(%rbp), %rdi
callq 0x14a30
movq %rax, -0x2a0(%rbp)
jmp 0x142fb
leaq -0x259(%rbp), %rdi
movq %rdi, -0x2a8(%rbp)
callq 0x6520
movq -0x2a0(%rbp), %rsi
movq -0x2a8(%rbp), %rdx
leaq -0x258(%rbp), %rdi
callq 0x14a50
jmp 0x1432a
leaq -0x259(%rbp), %rdi
callq 0x6310
leaq -0x258(%rbp), %rdi
callq 0x14ac0
movq %rax, -0x2b8(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x14a30
movq %rax, -0x2b0(%rbp)
jmp 0x1435e
movq -0x2b0(%rbp), %rdx
movq -0x2b8(%rbp), %rsi
leaq -0x218(%rbp), %rdi
callq 0x63b0
jmp 0x1437a
leaq -0x218(%rbp), %rdi
callq 0x60b0
jmp 0x14388
leaq -0x258(%rbp), %rdi
callq 0x14ac0
movq %rax, -0x2c8(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x14a30
movq %rax, -0x2c0(%rbp)
jmp 0x143b0
leaq -0x25a(%rbp), %rdi
movq %rdi, -0x2d0(%rbp)
callq 0x6520
movq -0x278(%rbp), %rdi
movq -0x2c8(%rbp), %rsi
movq -0x2c0(%rbp), %rdx
movq -0x2d0(%rbp), %rcx
callq 0x6340
jmp 0x143e6
leaq -0x25a(%rbp), %rdi
callq 0x6310
movl $0x1, -0x22c(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x14ae0
jmp 0x1446a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
leaq -0x259(%rbp), %rdi
callq 0x6310
jmp 0x14486
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
jmp 0x1445c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
leaq -0x25a(%rbp), %rdi
callq 0x6310
leaq -0x258(%rbp), %rdi
callq 0x14ae0
jmp 0x14486
leaq -0x218(%rbp), %rdi
callq 0x60d0
movq -0x270(%rbp), %rax
addq $0x2d0, %rsp            # imm = 0x2D0
popq %rbp
retq
leaq -0x218(%rbp), %rdi
callq 0x60d0
movq -0x220(%rbp), %rdi
callq 0x6510
nop