// File: /workspace/github_c_makefile_star2_O0/enzo1982[P]smooth/classes/graphics/imageloader/png.cpp
// Function: smooth::GUI::ImageLoaderPNG::Load()
const S::GUI::Bitmap &S::GUI::ImageLoaderPNG::Load()
{
	/* Make sure bitmap is initialized.
	 */
	bitmap = NIL;

	/* Check if we either have a file or a buffer to load.
	 */
	if (!gotFileName && !gotBuffer) return bitmap;

	/* Create and initialize the png_struct with the desired error handler
	 * functions.  If you want to use the default stderr and longjump method,
	 * you can supply NULL for the last three parameters.  We also supply the
	 * the compiler header file version, so that we know if the application
	 * was compiled with a compatible version of the library.
	 */
	png_structp	 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NIL, &my_png_error, &my_png_warning);

	if (png_ptr == NULL) return bitmap;

	/* Allocate/initialize the memory for image information.
	 */
	png_infop	 info_ptr = png_create_info_struct(png_ptr);

	if (info_ptr == NULL)
	{
		png_destroy_read_struct(&png_ptr, NULL, NULL);

		return bitmap;
	}

	/* Create input stream for file or buffer.
	 */
	InStream	*in = NIL;

	if	(gotFileName) in = new InStream(STREAM_FILE, fileName, IS_READ);
	else if (gotBuffer)   in = new InStream(STREAM_BUFFER, buffer, buffer.Size());

	if (in->GetLastError() != IO_ERROR_OK || in->InputNumberRaw(8) != (Int64) 0x89504E470D0A1A0ALL)
	{
		png_destroy_read_struct(&png_ptr, &info_ptr, NULL);

		delete in;

		return bitmap;
	}

	in->Seek(0);

	/* If you are using replacement read functions, instead of calling
	 * png_init_io() here you would call:
	 */
	png_set_read_fn(png_ptr, (void *) in, &my_png_read);

	/* The call to png_read_info() gives us all of the information from the
	 * PNG file before the first IDAT (image data chunk).
	 */
	png_read_info(png_ptr, info_ptr);

	/* Tell libpng to strip 16 bit/color files down to 8 bits/color.
	 */
	png_set_strip_16(png_ptr);

	/* Get basic image information and create bitmap.
	 */
	png_uint_32	 width	    = 0;
	png_uint_32	 height	    = 0;
	int		 bit_depth  = 0;
	int		 color_type = 0;

	png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, NULL, NULL, NULL);

	bitmap.CreateBitmap(Size(width, height), (color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
						  color_type == PNG_COLOR_TYPE_GRAY_ALPHA) ? 32 : 24);

	/* Set background color if the image has an alpha
	 * channel but we only have a non-alpha bitmap.
	 */
	if ((color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
	     color_type == PNG_COLOR_TYPE_GRAY_ALPHA) && bitmap.GetDepth() != 32)
	{
		/* Set the background color to draw transparent and alpha images over.
		 * It is possible to set the red, green, and blue components directly
		 * for paletted images instead of supplying a palette index.
		 */
		png_color_16 my_background;

		my_background.red = Setup::BackgroundColor.GetRed();
		my_background.green = Setup::BackgroundColor.GetGreen();
		my_background.blue = Setup::BackgroundColor.GetBlue();

		png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);

		if	(color_type == PNG_COLOR_TYPE_RGB_ALPHA)  color_type = PNG_COLOR_TYPE_RGB;
		else if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) color_type = PNG_COLOR_TYPE_GRAY;
	}

	/* Get palette information.
	 */
	png_colorp	 palette     = NULL;
	int		 num_palette = 0;

	png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);

	/* The easiest way to read the image.
	 */
	png_bytep *row_pointers = (png_bytep *) malloc(height * sizeof(png_bytep));

	for (unsigned int row = 0; row < height; row++) row_pointers[row] = (png_bytep) malloc(png_get_rowbytes(png_ptr, info_ptr));

	/* Now it's time to read the image.
	 */
	png_read_image(png_ptr, row_pointers);

	for (UnsignedInt y = 0; y < height; y++)
	{
		for (UnsignedInt x = 0; x < width; x++)
		{
			if	(color_type == PNG_COLOR_TYPE_GRAY	 && bit_depth == 1) bitmap.SetPixel(Point(x, y), Color(row_pointers[y][x / 8] & (128 >> (x % 8)) ? 255 : 0, Color::GRAY));
			else if	(color_type == PNG_COLOR_TYPE_GRAY	 && bit_depth == 8) bitmap.SetPixel(Point(x, y), Color(					  row_pointers[y][    x	   ] << 16 | row_pointers[y][	 x    ] << 8 | row_pointers[y][	   x], Color::RGB));
			else if	(color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth == 8) bitmap.SetPixel(Point(x, y), Color(row_pointers[y][2 * x + 1] << 24 | row_pointers[y][2 * x	   ] << 16 | row_pointers[y][2 * x    ] << 8 | row_pointers[y][2 * x], Color::RGBA));
			else if	(color_type == PNG_COLOR_TYPE_RGB	 && bit_depth == 8) bitmap.SetPixel(Point(x, y), Color(					  row_pointers[y][3 * x + 2] << 16 | row_pointers[y][3 * x + 1] << 8 | row_pointers[y][3 * x], Color::RGB));
			else if	(color_type == PNG_COLOR_TYPE_RGB_ALPHA	 && bit_depth == 8) bitmap.SetPixel(Point(x, y), Color(row_pointers[y][4 * x + 3] << 24 | row_pointers[y][4 * x + 2] << 16 | row_pointers[y][4 * x + 1] << 8 | row_pointers[y][4 * x], Color::RGBA));
			else if (color_type == PNG_COLOR_TYPE_PALETTE	 && bit_depth == 8) bitmap.SetPixel(Point(x, y), Color(palette[row_pointers[y][x]].red, palette[row_pointers[y][x]].green, palette[row_pointers[y][x]].blue, Color::RGB));
		}
	}

	/* Free PNG rows.
	 */
	for (unsigned int row = 0; row < height; row++) free(row_pointers[row]);

	free(row_pointers);

	/* Read rest of file, and get additional chunks in info_ptr.
	 */
	png_read_end(png_ptr, info_ptr);

	/* Clean up after the read, and free any memory allocated.
	 */
	png_destroy_read_struct(&png_ptr, &info_ptr, NULL);

	delete in;

	/* That's it.
	 */
	return bitmap;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1b0, %rsp            # imm = 0x1B0
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x120(%rbp)
addq $0x40, %rdi
xorl %esi, %esi
callq 0x5ac20
movq -0x120(%rbp), %rax
testb $0x1, 0x38(%rax)
jne 0x71f73
movq -0x120(%rbp), %rax
testb $0x1, 0x39(%rax)
jne 0x71f73
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x8(%rbp)
jmp 0x728cc
leaq 0x11564e(%rip), %rdi    # 0x1875c8
xorl %eax, %eax
movl %eax, %esi
leaq -0xc5(%rip), %rdx       # 0x71ec0
leaq -0xbc(%rip), %rcx       # 0x71ed0
callq 0x5d040
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x71fb0
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x8(%rbp)
jmp 0x728cc
movq -0x18(%rbp), %rdi
callq 0x5d280
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x71fe8
leaq -0x18(%rbp), %rdi
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x5a5b0
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x8(%rbp)
jmp 0x728cc
movq -0x120(%rbp), %rax
movq $0x0, -0x28(%rbp)
testb $0x1, 0x38(%rax)
je 0x72062
movl $0x108, %edi            # imm = 0x108
callq 0x59820
movq -0x120(%rbp), %rdx
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x128(%rbp)
addq $0x8, %rdx
movl $0x3, %esi
movl $0x2, %ecx
callq 0x5d200
jmp 0x72030
movq -0x128(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0x72109
movq -0x128(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
movl $0x108, %esi            # imm = 0x108
callq 0x595b0
jmp 0x728d9
movq -0x120(%rbp), %rax
testb $0x1, 0x39(%rax)
je 0x72107
movl $0x108, %edi            # imm = 0x108
callq 0x59820
movq -0x120(%rbp), %rdi
movq %rax, -0x138(%rbp)
addq $0x20, %rdi
callq 0x71100
movq %rax, -0x130(%rbp)
jmp 0x7209d
movq -0x120(%rbp), %rdi
addq $0x20, %rdi
callq 0x71140
movl %eax, -0x13c(%rbp)
jmp 0x720b5
movq -0x130(%rbp), %rdx
movq -0x138(%rbp), %rdi
movl -0x13c(%rbp), %eax
movslq %eax, %rcx
movl $0x5, %esi
callq 0x5aa00
jmp 0x720d8
movq -0x138(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0x72107
movq -0x138(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
movl $0x108, %esi            # imm = 0x108
callq 0x595b0
jmp 0x728d9
jmp 0x72109
movq -0x28(%rbp), %rdi
callq 0x5b1e0
cwtl
cmpl $0x0, %eax
jne 0x72135
movq -0x28(%rbp), %rdi
movl $0x8, %esi
callq 0x59fd0
movabsq $-0x76afb1b8f2f5e5f6, %rcx # imm = 0x89504E470D0A1A0A
cmpq %rcx, %rax
je 0x72178
leaq -0x18(%rbp), %rdi
leaq -0x20(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x5a5b0
movq -0x28(%rbp), %rax
movq %rax, -0x148(%rbp)
cmpq $0x0, %rax
je 0x72164
movq -0x148(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x8(%rbp)
jmp 0x728cc
movq -0x28(%rbp), %rdi
movq (%rdi), %rax
xorl %ecx, %ecx
movl %ecx, %esi
callq *0x28(%rax)
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
leaq -0x2b5(%rip), %rdx      # 0x71ee0
callq 0x59f40
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x59a80
movq -0x18(%rbp), %rdi
callq 0x5d440
movl $0x0, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq -0x38(%rbp), %rdx
leaq -0x3c(%rbp), %rcx
leaq -0x40(%rbp), %r8
leaq -0x44(%rbp), %r9
xorl %eax, %eax
movq $0x0, (%rsp)
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
callq 0x5cd60
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x158(%rbp)
movl -0x38(%rbp), %esi
movl -0x3c(%rbp), %edx
leaq -0x4c(%rbp), %rdi
callq 0x59260
movb $0x1, %al
cmpl $0x6, -0x44(%rbp)
movb %al, -0x149(%rbp)
je 0x72241
cmpl $0x4, -0x44(%rbp)
sete %al
movb %al, -0x149(%rbp)
movq -0x158(%rbp), %rdi
movb -0x149(%rbp), %cl
movl $0x18, %edx
movl $0x20, %eax
testb $0x1, %cl
cmovnel %eax, %edx
leaq -0x4c(%rbp), %rsi
callq 0x5c4d0
cmpl $0x6, -0x44(%rbp)
je 0x72277
cmpl $0x4, -0x44(%rbp)
jne 0x722fb
movq -0x120(%rbp), %rdi
addq $0x40, %rdi
callq 0x5b190
movsbl %al, %eax
cmpl $0x20, %eax
je 0x722fb
movq 0x196212(%rip), %rdi    # 0x2084a8
callq 0x59f20
movw %ax, -0x54(%rbp)
movq 0x196202(%rip), %rdi    # 0x2084a8
callq 0x5d920
movw %ax, -0x52(%rbp)
movq 0x1961f2(%rip), %rdi    # 0x2084a8
callq 0x5b650
movw %ax, -0x50(%rbp)
movq -0x18(%rbp), %rdi
leaq -0x56(%rbp), %rsi
movl $0x1, %edx
xorl %ecx, %ecx
movsd 0x115092(%rip), %xmm0   # 0x187368
callq 0x5d720
cmpl $0x6, -0x44(%rbp)
jne 0x722ea
movl $0x2, -0x44(%rbp)
jmp 0x722f9
cmpl $0x4, -0x44(%rbp)
jne 0x722f7
movl $0x0, -0x44(%rbp)
jmp 0x722f9
jmp 0x722fb
movq $0x0, -0x60(%rbp)
movl $0x0, -0x64(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq -0x60(%rbp), %rdx
leaq -0x64(%rbp), %rcx
callq 0x59e80
movl -0x3c(%rbp), %eax
movl %eax, %edi
shlq $0x3, %rdi
callq 0x5c920
movq %rax, -0x70(%rbp)
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jae 0x7236e
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x5ddd0
movq %rax, %rdi
callq 0x5c920
movq %rax, %rdx
movq -0x70(%rbp), %rax
movl -0x74(%rbp), %ecx
movq %rdx, (%rax,%rcx,8)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x72338
movq -0x18(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x5a000
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jae 0x7283f
movl $0x0, -0x7c(%rbp)
movl -0x7c(%rbp), %eax
cmpl -0x38(%rbp), %eax
jae 0x7282f
cmpl $0x0, -0x44(%rbp)
jne 0x7243f
cmpl $0x1, -0x40(%rbp)
jne 0x7243f
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x160(%rbp)
movl -0x7c(%rbp), %esi
movl -0x78(%rbp), %edx
leaq -0x84(%rbp), %rdi
callq 0x5c2c0
movq -0x70(%rbp), %rax
movl -0x78(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl -0x7c(%rbp), %ecx
shrl $0x3, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %edx
movl -0x7c(%rbp), %ecx
andl $0x7, %ecx
movl $0x80, %eax
sarl %cl, %eax
andl %eax, %edx
xorl %eax, %eax
movl $0xff, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
movslq %eax, %rsi
leaq -0x98(%rbp), %rdi
movl $0x6, %edx
callq 0x59be0
movq -0x160(%rbp), %rdi
leaq -0x84(%rbp), %rsi
leaq -0x98(%rbp), %rdx
callq 0x5a3d0
jmp 0x7281f
cmpl $0x0, -0x44(%rbp)
jne 0x724e7
cmpl $0x8, -0x40(%rbp)
jne 0x724e7
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x168(%rbp)
movl -0x7c(%rbp), %esi
movl -0x78(%rbp), %edx
leaq -0xa0(%rbp), %rdi
callq 0x5c2c0
movq -0x70(%rbp), %rax
movl -0x78(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl -0x7c(%rbp), %ecx
movzbl (%rax,%rcx), %eax
shll $0x10, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
orl %ecx, %eax
movslq %eax, %rsi
leaq -0xb0(%rbp), %rdi
xorl %edx, %edx
callq 0x59be0
movq -0x168(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0x5a3d0
jmp 0x7281d
cmpl $0x4, -0x44(%rbp)
jne 0x725bc
cmpl $0x8, -0x40(%rbp)
jne 0x725bc
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x170(%rbp)
movl -0x7c(%rbp), %esi
movl -0x78(%rbp), %edx
leaq -0xb8(%rbp), %rdi
callq 0x5c2c0
movq -0x70(%rbp), %rax
movl -0x78(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl -0x7c(%rbp), %ecx
shll %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shll $0x18, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
shll %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
shll $0x10, %ecx
orl %ecx, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
shll %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
shll %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
orl %ecx, %eax
movslq %eax, %rsi
leaq -0xc8(%rbp), %rdi
movl $0x1, %edx
callq 0x59be0
movq -0x170(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5a3d0
jmp 0x7281b
cmpl $0x2, -0x44(%rbp)
jne 0x72673
cmpl $0x8, -0x40(%rbp)
jne 0x72673
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x178(%rbp)
movl -0x7c(%rbp), %esi
movl -0x78(%rbp), %edx
leaq -0xd0(%rbp), %rdi
callq 0x5c2c0
movq -0x70(%rbp), %rax
movl -0x78(%rbp), %ecx
movq (%rax,%rcx,8), %rax
imull $0x3, -0x7c(%rbp), %ecx
addl $0x2, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shll $0x10, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
imull $0x3, -0x7c(%rbp), %edx
addl $0x1, %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
imull $0x3, -0x7c(%rbp), %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
orl %ecx, %eax
movslq %eax, %rsi
leaq -0xe0(%rbp), %rdi
xorl %edx, %edx
callq 0x59be0
movq -0x178(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0x5a3d0
jmp 0x72819
cmpl $0x6, -0x44(%rbp)
jne 0x72752
cmpl $0x8, -0x40(%rbp)
jne 0x72752
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x180(%rbp)
movl -0x7c(%rbp), %esi
movl -0x78(%rbp), %edx
leaq -0xe8(%rbp), %rdi
callq 0x5c2c0
movq -0x70(%rbp), %rax
movl -0x78(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl -0x7c(%rbp), %ecx
shll $0x2, %ecx
addl $0x3, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shll $0x18, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
shll $0x2, %edx
addl $0x2, %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
shll $0x10, %ecx
orl %ecx, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
shll $0x2, %edx
addl $0x1, %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
shll $0x2, %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
orl %ecx, %eax
movslq %eax, %rsi
leaq -0xf8(%rbp), %rdi
movl $0x1, %edx
callq 0x59be0
movq -0x180(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
leaq -0xf8(%rbp), %rdx
callq 0x5a3d0
jmp 0x72817
cmpl $0x3, -0x44(%rbp)
jne 0x72815
cmpl $0x8, -0x40(%rbp)
jne 0x72815
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x188(%rbp)
movl -0x7c(%rbp), %esi
movl -0x78(%rbp), %edx
leaq -0x100(%rbp), %rdi
callq 0x5c2c0
movq -0x60(%rbp), %rax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
imulq $0x3, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %esi
movq -0x60(%rbp), %rax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movl -0x7c(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
imulq $0x3, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x60(%rbp), %rax
movq -0x70(%rbp), %rcx
movl -0x78(%rbp), %edi
movq (%rcx,%rdi,8), %rcx
movl -0x7c(%rbp), %edi
movzbl (%rcx,%rdi), %ecx
imulq $0x3, %rcx, %rcx
addq %rcx, %rax
movzbl 0x2(%rax), %ecx
leaq -0x110(%rbp), %rdi
xorl %r8d, %r8d
callq 0x5a6b0
movq -0x188(%rbp), %rdi
leaq -0x100(%rbp), %rsi
leaq -0x110(%rbp), %rdx
callq 0x5a3d0
jmp 0x72817
jmp 0x72819
jmp 0x7281b
jmp 0x7281d
jmp 0x7281f
jmp 0x72821
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x72395
jmp 0x72831
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x72382
movl $0x0, -0x114(%rbp)
movl -0x114(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jae 0x72878
movq -0x70(%rbp), %rax
movl -0x114(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
callq 0x59930
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0x72849
movq -0x70(%rbp), %rdi
callq 0x59930
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x5a4b0
leaq -0x18(%rbp), %rdi
leaq -0x20(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x5a5b0
movq -0x28(%rbp), %rax
movq %rax, -0x190(%rbp)
cmpq $0x0, %rax
je 0x728bd
movq -0x190(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq -0x120(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x1b0, %rsp            # imm = 0x1B0
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x5b6b0
nopw %cs:(%rax,%rax)
nopl (%rax)