// File: /workspace/github_cpp_makefile_star2_O2/rpavlik[P]edid-decode/parse-displayid-block.cpp
// Function: edid_state::parse_displayid_block(unsigned char const*)
void edid_state::parse_displayid_block(const unsigned char *x)
{
	unsigned version = x[1];
	unsigned length = x[2];
	unsigned prod_type = x[3]; // future check: based on type, check for required data blocks
	unsigned ext_count = x[4];
	unsigned i;

	printf("  Version: %u.%u\n  Extension Count: %u\n",
	       version >> 4, version & 0xf, ext_count);

	if (dispid.is_base_block) {
		dispid.version = version;
		printf("  %s: %s\n", product_type(prod_type, true).c_str(),
		       product_type(prod_type, false).c_str());
		if (!prod_type)
			fail("DisplayID Base Block has no product type.\n");
		if (ext_count != dispid.preparsed_displayid_blocks - 1)
			fail("Expected %u DisplayID Extension Block%s, but got %u.\n",
			     ext_count,
			     ext_count > 1 ? "s" : "",
			     dispid.preparsed_displayid_blocks - 1);
	} else {
		if (prod_type)
			fail("Product Type should be 0 in extension block.\n");
		if (ext_count)
			fail("Extension Count should be 0 in extension block.\n");
		if (version != dispid.version)
			fail("Got version %u.%u, expected %u.%u.\n",
			     version >> 4, version & 0xf,
			     dispid.version >> 4, dispid.version & 0xf);
	}

	if (length > 121) {
		fail("DisplayID length %d is greater than 121.\n", length);
		length = 121;
	}

	unsigned offset = 5;
	bool first_data_block = true;
	while (length > 0) {
		unsigned tag = x[offset];
		unsigned oui = 0;

		switch (tag) {
		// DisplayID 1.3:
		case 0x00: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x01: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x02: data_block = "Color Characteristics Data Block"; break;
		case 0x03: data_block = "Video Timing Modes Type 1 - Detailed Timings Data Block"; break;
		case 0x04: data_block = "Video Timing Modes Type 2 - Detailed Timings Data Block"; break;
		case 0x05: data_block = "Video Timing Modes Type 3 - Short Timings Data Block"; break;
		case 0x06: data_block = "Video Timing Modes Type 4 - DMT Timings Data Block"; break;
		case 0x07: data_block = "Supported Timing Modes Type 1 - VESA DMT Timings Data Block"; break;
		case 0x08: data_block = "Supported Timing Modes Type 2 - CTA-861 Timings Data Block"; break;
		case 0x09: data_block = "Video Timing Range Data Block"; break;
		case 0x0a: data_block = "Product Serial Number Data Block"; break;
		case 0x0b: data_block = "GP ASCII String Data Block"; break;
		case 0x0c: data_block = "Display Device Data Data Block"; break;
		case 0x0d: data_block = "Interface Power Sequencing Data Block"; break;
		case 0x0e: data_block = "Transfer Characteristics Data Block"; break;
		case 0x0f: data_block = "Display Interface Data Block"; break;
		case 0x10: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x11: data_block = "Video Timing Modes Type 5 - Short Timings Data Block"; break;
		case 0x12: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x13: data_block = "Video Timing Modes Type 6 - Detailed Timings Data Block"; break;
		// 0x14 .. 0x7e RESERVED for Additional VESA-defined Data Blocks
		// DisplayID 2.0
		case 0x20: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x21: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x22: data_block = "Video Timing Modes Type 7 - Detailed Timings Data Block"; break;
		case 0x23: data_block = "Video Timing Modes Type 8 - Enumerated Timing Codes Data Block"; break;
		case 0x24: data_block = "Video Timing Modes Type 9 - Formula-based Timings Data Block"; break;
		case 0x25: data_block = "Dynamic Video Timing Range Limits Data Block"; break;
		case 0x26: data_block = "Display Interface Features Data Block"; break;
		case 0x27: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x28: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x29: data_block = "ContainerID Data Block"; break;
		case 0x32: data_block = "Video Timing Modes Type 10 - Formula-based Timings Data Block"; break;
		// 0x2a .. 0x7d RESERVED for Additional VESA-defined Data Blocks
		case 0x7e: // DisplayID 2.0
		case 0x7f: // DisplayID 1.3
			if ((tag == 0x7e && version >= 0x20) ||
			    (tag == 0x7f && version < 0x20)) {
				oui = (x[offset + 3] << 16) + (x[offset + 4] << 8) + x[offset + 5];
				const char *name = oui_name(oui);
				bool reversed = false;

				if (!name) {
					name = oui_name(oui, true);
					if (name)
						reversed = true;
				}
				if (name)
					data_block = std::string("Vendor-Specific Data Block (") + name + ")";
				else
					data_block = "Vendor-Specific Data Block, OUI " + ouitohex(oui);
				if (reversed)
					fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order.\n").c_str());
			} else {
				data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")";
			}
			break;
		// 0x80 RESERVED
		case 0x81: data_block = "CTA-861 DisplayID Data Block (" + utohex(tag) + ")"; break;
		// 0x82 .. 0xff RESERVED
		default:   data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")"; break;
		}

		if (version >= 0x20 && (tag < 0x20 || tag == 0x7f))
			fail("Use of DisplayID v1.x tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);
		if (version < 0x20 && tag >= 0x20 && tag <= 0x7e)
			fail("Use of DisplayID v2.0 tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);

		if (length < 3) {
			// report a problem when the remaining bytes are not 0.
			if (tag || x[offset + 1]) {
				fail("Not enough bytes remain (%d) for a DisplayID data block or the DisplayID filler is non-0.\n", length);
			}
			break;
		}

		unsigned block_rev = x[offset + 1] & 0x07;
		unsigned len = x[offset + 2];

		if (length < len + 3) {
			fail("The length of this DisplayID data block (%d) exceeds the number of bytes remaining (%d).\n", len + 3, length);
			break;
		}

		if (!tag && !len) {
			// A Product Identification Data Block with no payload bytes is not valid - assume this is the end.
			if (!memchk(x + offset, length)) {
				fail("Non-0 filler bytes in the DisplayID block.\n");
			}
			break;
		}

		printf("  %s:\n", data_block.c_str());

		switch (tag) {
		case 0x00: parse_displayid_product_id(x + offset); break;
		case 0x01: parse_displayid_parameters(x + offset); break;
		case 0x02: parse_displayid_color_characteristics(x + offset); break;
		case 0x03:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 20; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + (i * 20)], false, block_rev);
			   break;
		case 0x04:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 11; i++)
				   parse_displayid_type_2_timing(&x[offset + 3 + (i * 11)]);
			   break;
		case 0x05:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 3; i++)
				   parse_displayid_type_3_timing(&x[offset + 3 + (i * 3)]);
			   break;
		case 0x06:
			   check_displayid_datablock_revision(x[offset + 1], 0xc0, 1);
			   for (i = 0; i < len; i++)
				   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6, x[offset + 3 + i]);
			   break;
		case 0x07:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 10) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "DMT 0x%02x", i + 1);
					   print_timings("    ", find_dmt_id(i + 1), type);
				   }
			   break;
		case 0x08:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 8) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "VIC %3u", i + 1);
					   print_timings("    ", find_vic_id(i + 1), type);
				   }
			   break;
		case 0x09: parse_displayid_video_timing_range_limits(x + offset); break;
		case 0x0a:
		case 0x0b: parse_displayid_string(x + offset); break;
		case 0x0c: parse_displayid_display_device(x + offset); break;
		case 0x0d: parse_displayid_intf_power_sequencing(x + offset); break;
		case 0x0e: parse_displayid_transfer_characteristics(x + offset); break;
		case 0x0f: parse_displayid_display_intf(x + offset); break;
		case 0x10: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x11:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 7; i++)
				   parse_displayid_type_5_timing(&x[offset + 3 + (i * 7)]);
			   break;
		case 0x12: parse_displayid_tiled_display_topology(x + offset, false); break;
		case 0x13:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len; i += (x[offset + 3 + i + 2] & 0x40) ? 17 : 14)
				   parse_displayid_type_6_timing(&x[offset + 3 + i]);
			   break;
		case 0x20: parse_displayid_product_id(x + offset); break;
		case 0x21:
			   if (block_rev >= 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 0);
			   parse_displayid_parameters_v2(x + offset, block_rev);
			   break;
		case 0x22: {
			   unsigned sz = 20;

			   if (block_rev >= 2)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 2);
			   else if (block_rev == 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1]);
			   sz += (x[offset + 1] & 0x70) >> 4;
			   if (block_rev >= 1 && (x[offset + 1] & 0x08))
				   printf("    These timings support DSC pass-through\n");
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + i * sz], true, block_rev);
			   break;
		}
		case 0x23:
			   if (block_rev)
				   check_displayid_datablock_revision(x[offset + 1], 0xe8, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0xc8);
			   if (x[offset + 1] & 0x08) {
				   for (i = 0; i < len / 2; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i * 2] |
									   (x[offset + 4 + i * 2] << 8));
			   } else {
				   for (i = 0; i < len; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i]);
			   }
			   break;
		case 0x24:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 6; i++)
				   parse_displayid_type_9_timing(&x[offset + 3 + i * 6]);
			   break;
		case 0x25: parse_displayid_dynamic_video_timings_range_limits(x + offset); break;
		case 0x26: parse_displayid_interface_features(x + offset); break;
		case 0x27: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x28: parse_displayid_tiled_display_topology(x + offset, true); break;
		case 0x29: parse_displayid_ContainerID(x + offset); break;
		case 0x32: {
			   unsigned sz = 6 + ((x[offset + 1] & 0x70) >> 4);

			   check_displayid_datablock_revision(x[offset + 1], 0x10);
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_10_timing(&x[offset + 3 + i * sz]);
			   break;
		}
		case 0x81: parse_displayid_cta_data_block(x + offset); break;
		case 0x7e:
			if (oui == 0x3a0292) {
				parse_displayid_vesa(x + offset);
				break;
			}
			// fall-through
		default: hex_block("    ", x + offset + 3, len); break;
		}

		if ((tag == 0x00 || tag == 0x20) &&
		    (!dispid.is_base_block || !first_data_block))
			fail("%s is required to be the first DisplayID Data Block.\n",
			     data_block.c_str());
		length -= len + 3;
		offset += len + 3;
		first_data_block = false;
	}

	/*
	 * DisplayID length field is number of following bytes
	 * but checksum is calculated over the entire structure
	 * (excluding DisplayID-in-EDID magic byte)
	 */
	data_block.clear();
	do_checksum("  ", x + 1, x[2] + 5);

	if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) {
		data_block = "Padding";
		fail("DisplayID padding contains non-zero bytes.\n");
	}
	dispid.is_base_block = false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
movq %rdi, %r14
movzbl 0x1(%rsi), %ebp
movzbl 0x2(%rsi), %r15d
movb 0x3(%rsi), %r13b
movq %rsi, 0x18(%rsp)
movzbl 0x4(%rsi), %ebx
movl %ebp, %esi
shrl $0x4, %esi
movl %ebp, %edx
andl $0xf, %edx
leaq 0x13dea(%rip), %rdi     # 0x2a289
movl %esi, 0xb8(%rsp)
movl %edx, 0xb4(%rsp)
movl %ebx, %ecx
xorl %eax, %eax
callq 0x3030
cmpb $0x1, 0x91c(%r14)
movl %ebp, 0x88(%rsp)
jne 0x16583
movb %bpl, 0x910(%r14)
movzbl %r13b, %ebp
leaq 0x90(%rsp), %r12
pushq $0x1
popq %rcx
movq %r12, %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x15ff8
movq (%r12), %r12
leaq 0x38(%rsp), %rdi
movq %r14, %rsi
movl %ebp, %edx
xorl %ecx, %ecx
callq 0x15ff8
leaq 0x38(%rsp), %rbp
movq (%rbp), %rdx
leaq 0x13d9e(%rip), %rdi     # 0x2a2b1
movq %r12, %rsi
xorl %eax, %eax
callq 0x3030
movq %rbp, %rdi
callq 0x3130
leaq 0x90(%rsp), %rdi
callq 0x3130
testb %r13b, %r13b
jne 0x16547
leaq 0x13d7d(%rip), %rsi     # 0x2a2bb
xorl %edi, %edi
xorl %eax, %eax
callq 0x362c
movl 0x918(%r14), %r8d
decl %r8d
cmpl %ebx, %r8d
je 0x165e9
cmpb $0x2, %bl
leaq 0x480f(%rip), %rax      # 0x1ad73
leaq 0x471e(%rip), %rcx      # 0x1ac89
cmovaeq %rax, %rcx
leaq 0x13d70(%rip), %rsi     # 0x2a2e6
xorl %edi, %edi
movl %ebx, %edx
xorl %eax, %eax
callq 0x362c
jmp 0x165e9
testb %r13b, %r13b
je 0x16598
leaq 0x13d8d(%rip), %rsi     # 0x2a31c
xorl %edi, %edi
xorl %eax, %eax
callq 0x362c
testl %ebx, %ebx
movl 0x88(%rsp), %ebx
je 0x165b3
leaq 0x13da0(%rip), %rsi     # 0x2a34a
xorl %edi, %edi
xorl %eax, %eax
callq 0x362c
movzbl 0x910(%r14), %r9d
cmpb %r9b, %bl
je 0x165e9
movl %r9d, %r8d
shrl $0x4, %r8d
andl $0xf, %r9d
leaq 0x13da9(%rip), %rsi     # 0x2a37b
xorl %edi, %edi
movl 0xb8(%rsp), %edx
movl 0xb4(%rsp), %ecx
xorl %eax, %eax
callq 0x362c
pushq $0x79
popq %rbx
cmpb $0x7a, %r15b
jb 0x16608
leaq 0x13da6(%rip), %rsi     # 0x2a39f
xorl %edi, %edi
movl %r15d, %edx
xorl %eax, %eax
callq 0x362c
movl %ebx, %r15d
movq 0x18(%rsp), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0xc0(%rsp)
leaq 0x30(%r14), %rax
movq %rax, 0x20(%rsp)
movb $0x1, %cl
pushq $0x5
popq %rbx
movq %r14, 0x28(%rsp)
testl %r15d, %r15d
je 0x175de
movl %r15d, %r13d
movl %ebx, %ebp
movzbl (%rdi,%rbp), %r8d
cmpq $0x32, %r8
movq %rbx, 0x30(%rsp)
movq %r8, 0x80(%rsp)
movl %ecx, 0xbc(%rsp)
ja 0x166aa
leaq 0x12178(%rip), %rcx     # 0x287d8
movslq (%rcx,%r8,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x58(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4e28
leaq 0x13d4a(%rip), %rsi     # 0x2a3c9
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0x1021a(%rip), %rdx     # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leal -0x7e(%r8), %eax
cmpl $0x2, %eax
jae 0x1672c
cmpb $0x20, 0x88(%rsp)
setb %al
setae %dl
cmpl $0x7e, %r8d
sete %sil
cmpl $0x7f, %r8d
sete %cl
testb %sil, %dl
jne 0x171d3
andb %cl, %al
jne 0x171d3
leaq 0x58(%rsp), %r12
movq %r12, %rdi
movq 0x80(%rsp), %rsi
callq 0x4e28
leaq 0x38(%rsp), %r15
movq %r15, %rdi
leaq 0x14186(%rip), %rsi     # 0x2a88b
movq %r12, %rdx
callq 0xbafb
leaq 0x90(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
leaq 0x1018b(%rip), %rdx     # 0x268ad
callq 0x75a4
jmp 0x167c0
cmpl $0x81, %r8d
jne 0x1677a
leaq 0x58(%rsp), %r12
movq %r12, %rdi
movl $0x81, %esi
callq 0x4e28
leaq 0x38(%rsp), %r15
movq %r15, %rdi
leaq 0x14154(%rip), %rsi     # 0x2a8aa
movq %r12, %rdx
callq 0xbafb
leaq 0x90(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
leaq 0x1013a(%rip), %rdx     # 0x268ad
callq 0x75a4
jmp 0x167c0
leaq 0x58(%rsp), %r12
movq %r12, %rdi
movq 0x80(%rsp), %rsi
callq 0x4e28
leaq 0x38(%rsp), %r15
movq %r15, %rdi
leaq 0x140ed(%rip), %rsi     # 0x2a88b
movq %r12, %rdx
callq 0xbafb
leaq 0x90(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
leaq 0x100f2(%rip), %rdx     # 0x268ad
callq 0x75a4
movq 0x20(%rsp), %rdi
movq %r12, %rsi
callq 0x32f0
movq %r12, %rdi
callq 0x3130
movq %r15, %rdi
callq 0x3130
leaq 0x58(%rsp), %rdi
callq 0x3130
jmp 0x16afa
leaq 0x13fde(%rip), %rsi     # 0x2a7d1
jmp 0x16af0
leaq 0x58(%rsp), %rbx
pushq $0x28
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x13e85(%rip), %rsi     # 0x2a694
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0x1008a(%rip), %rdx     # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leaq 0x58(%rsp), %rbx
pushq $0x10
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x13de8(%rip), %rsi     # 0x2a639
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0x10048(%rip), %rdx     # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leaq 0x13d18(%rip), %rsi     # 0x2a59b
jmp 0x16af0
leaq 0x58(%rsp), %rbx
pushq $0x27
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x13d9a(%rip), %rsi     # 0x2a639
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0xfffa(%rip), %rdx      # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leaq 0x13d4b(%rip), %rsi     # 0x2a61c
jmp 0x16af0
leaq 0x13b51(%rip), %rsi     # 0x2a42e
jmp 0x16af0
leaq 0x58(%rsp), %rbx
pushq $0x12
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x13d9b(%rip), %rsi     # 0x2a694
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0xffa0(%rip), %rdx      # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leaq 0x13b3b(%rip), %rsi     # 0x2a466
jmp 0x16af0
leaq 0x13ad6(%rip), %rsi     # 0x2a40d
jmp 0x16af0
leaq 0x13eb4(%rip), %rsi     # 0x2a7f7
jmp 0x16af0
leaq 0x58(%rsp), %rbx
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x13a8e(%rip), %rsi     # 0x2a3ed
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0xff3a(%rip), %rdx      # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leaq 0x13b0d(%rip), %rsi     # 0x2a49e
jmp 0x16af0
leaq 0x13d53(%rip), %rsi     # 0x2a6f0
jmp 0x16af0
leaq 0x13c4d(%rip), %rsi     # 0x2a5f6
jmp 0x16af0
leaq 0x13bc8(%rip), %rsi     # 0x2a57d
jmp 0x16af0
leaq 0x13b81(%rip), %rsi     # 0x2a542
jmp 0x16af0
leaq 0x13b06(%rip), %rsi     # 0x2a4d3
jmp 0x16af0
leaq 0x13b2d(%rip), %rsi     # 0x2a506
jmp 0x16af0
leaq 0x13bf2(%rip), %rsi     # 0x2a5d7
jmp 0x16af0
leaq 0x13bcb(%rip), %rsi     # 0x2a5bc
jmp 0x16af0
leaq 0x13c62(%rip), %rsi     # 0x2a65f
jmp 0x16af0
leaq 0x58(%rsp), %rbx
pushq $0x21
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x139d4(%rip), %rsi     # 0x2a3ed
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0xfe80(%rip), %rdx      # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
jmp 0x16a8a
leaq 0x13d1f(%rip), %rsi     # 0x2a767
jmp 0x16af0
leaq 0x58(%rsp), %rbx
pushq $0x20
popq %rsi
movq %rbx, %rdi
callq 0x4e28
leaq 0x13965(%rip), %rsi     # 0x2a3c9
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0xbafb
leaq 0xfe35(%rip), %rdx      # 0x268ad
leaq 0x90(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x75a4
leaq 0x90(%rsp), %rbx
movq 0x20(%rsp), %rdi
movq %rbx, %rsi
callq 0x32f0
movq %rbx, %rdi
callq 0x3130
leaq 0x38(%rsp), %rdi
callq 0x3130
leaq 0x58(%rsp), %rdi
callq 0x3130
xorl %r12d, %r12d
movq 0x30(%rsp), %rbx
jmp 0x16afd
leaq 0x13bec(%rip), %rsi     # 0x2a6b8
jmp 0x16af0
leaq 0xe897(%rip), %rsi      # 0x2536c
jmp 0x16af0
leaq 0x13c4a(%rip), %rsi     # 0x2a728
jmp 0x16af0
leaq 0x13d27(%rip), %rsi     # 0x2a80e
jmp 0x16af0
leaq 0x13cb4(%rip), %rsi     # 0x2a7a4
movq 0x20(%rsp), %rdi
callq 0x3460
xorl %r12d, %r12d
cmpb $0x20, 0x88(%rsp)
jb 0x16b28
movq 0x80(%rsp), %rcx
cmpb $0x20, %cl
setb %al
cmpl $0x7f, %ecx
sete %cl
orb %al, %cl
leaq 0x13da5(%rip), %rsi     # 0x2a8c9
jne 0x16b40
jmp 0x16b57
jae 0x16b57
movq 0x80(%rsp), %rax
addl $-0x20, %eax
leaq 0x13dbe(%rip), %rsi     # 0x2a8fa
cmpb $0x5e, %al
ja 0x16b57
xorl %edi, %edi
movl 0xb8(%rsp), %edx
movl 0xb4(%rsp), %ecx
xorl %eax, %eax
callq 0x362c
cmpl $0x2, %r13d
movq 0x18(%rsp), %rdi
jbe 0x17574
leal 0x2(%rbx), %eax
movzbl (%rdi,%rax), %ebx
leal 0x3(%rbx), %edx
movl %r13d, %eax
subl %edx, %eax
jb 0x1759b
movl %eax, 0x14(%rsp)
movq %rbp, %r15
movl %r12d, %ebp
movq %r14, %r12
addq %rdi, %r15
movl %ebx, %eax
movq 0x80(%rsp), %r14
orl %r14d, %eax
je 0x175b0
movl %edx, 0x7c(%rsp)
movq 0x30(%rsp), %rax
leal 0x1(%rax), %r12d
movzbl (%rdi,%r12), %r13d
movq 0x20(%rsp), %rax
movq (%rax), %rsi
leaq 0x824c(%rip), %rdi      # 0x1ee0b
xorl %eax, %eax
callq 0x3030
cmpl $0x32, %r14d
ja 0x16c1b
movq %r14, %rax
movl %r13d, %r14d
andl $0x7, %r14d
movl %eax, %eax
leaq 0x11cc5(%rip), %rcx     # 0x288a4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x12436
movl 0xbc(%rsp), %eax
testb %al, 0x91c(%r14)
movq 0x18(%rsp), %rdi
movl 0x14(%rsp), %r15d
je 0x1727d
jmp 0x1729a
cmpl $0x7e, %r14d
je 0x17218
cmpl $0x81, %r14d
jne 0x17236
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x15ef8
jmp 0x1722a
movq %r15, %rsi
callq 0x13868
jmp 0x17252
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x14302
jmp 0x1722a
movq %r15, %rsi
callq 0x15a74
jmp 0x17225
pushq $0x1
popq %rdx
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
jmp 0x1717b
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x157c4
jmp 0x1722a
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x138b0
jmp 0x1722a
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x13c88
jmp 0x1722a
movq 0x18(%rsp), %r14
movzbl (%r14,%r12), %esi
xorl %ebp, %ebp
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movq %r14, %rdi
cmpl $0xa, %ebx
pushq $0xa
popq %r12
cmovbl %ebx, %r12d
shll $0x3, %r12d
movq 0x30(%rsp), %rax
leal 0x3(%rax), %r13d
movl 0x14(%rsp), %r15d
cmpl %r12d, %ebp
je 0x1725c
movl %ebp, %eax
shrl $0x3, %eax
addl %r13d, %eax
movzbl (%rdi,%rax), %eax
movl %ebp, %ecx
andl $0x7, %ecx
incl %ebp
btl %ecx, %eax
jae 0x16cfd
leaq 0x3bba(%rip), %rsi      # 0x1a8df
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0x3070
movzbl %bpl, %edi
callq 0x7d78
movl $0x1, (%rsp)
leaq 0x8747(%rip), %rsi      # 0x1f497
leaq 0x3f32(%rip), %r8       # 0x1ac89
movq 0x28(%rsp), %rdi
movq %rax, %rdx
movq %rbx, %rcx
xorl %r9d, %r9d
callq 0x3af0
movq 0x18(%rsp), %rdi
jmp 0x16cfd
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x1258e
jmp 0x1722a
pushq $0x8
popq %r13
movq 0x18(%rsp), %r14
movzbl (%r14,%r12), %esi
xorl %ebp, %ebp
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movq %r14, %rdi
cmpl $0x8, %ebx
cmovbl %ebx, %r13d
shll $0x3, %r13d
movq 0x30(%rsp), %rax
leal 0x3(%rax), %r12d
movl 0x14(%rsp), %r15d
cmpl %r13d, %ebp
je 0x1725c
movl %ebp, %eax
shrl $0x3, %eax
addl %r12d, %eax
movzbl (%rdi,%rax), %eax
movl %ebp, %ecx
andl $0x7, %ecx
incl %ebp
btl %ecx, %eax
jae 0x16dbb
leaq 0x3b21(%rip), %rsi      # 0x1a904
leaq 0x90(%rsp), %rbx
movq %rbx, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0x3070
movzbl %bpl, %edi
callq 0xbf2b
movl $0x1, (%rsp)
leaq 0x8689(%rip), %rsi      # 0x1f497
leaq 0x3e74(%rip), %r8       # 0x1ac89
movq 0x28(%rsp), %rdi
movq %rax, %rdx
movq %rbx, %rcx
xorl %r9d, %r9d
callq 0x3af0
movq 0x18(%rsp), %rdi
jmp 0x16dbb
movq %r15, %rsi
callq 0x156fa
jmp 0x17225
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
andb $0x1, %r13b
movzbl %r13b, %ecx
xorl %edx, %edx
callq 0x123f0
movzbl %bl, %eax
movb $0x3, %cl
divb %cl
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r14d
movl 0x14(%rsp), %r15d
subq $0x1, %r14
movq 0x18(%rsp), %rdi
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
callq 0x132f8
addl $0x3, %ebx
jmp 0x16e6d
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x1277e
jmp 0x1722a
movq %r15, %rsi
callq 0x13bbe
jmp 0x17225
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
pushq $0x1
popq %rcx
movl $0xc0, %edx
callq 0x123f0
movq 0x30(%rsp), %rax
leal 0x3(%rax), %ebp
movl 0x14(%rsp), %r15d
subq $0x1, %rbx
movq 0x18(%rsp), %rdi
jb 0x1725c
movb (%rdi,%r12), %al
shrb $0x6, %al
movl %ebp, %ecx
movzbl (%rdi,%rcx), %edx
movzbl %al, %esi
movq 0x28(%rsp), %rdi
xorl %ecx, %ecx
callq 0x135f0
incl %ebp
jmp 0x16ed6
movq 0x18(%rsp), %r14
movzbl (%r14,%r12), %esi
xorl %r12d, %r12d
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movq %r14, %rdi
movq 0x30(%rsp), %rax
leal 0x3(%rax), %r14d
movl 0x14(%rsp), %r15d
cmpl %ebx, %r12d
jae 0x1725c
leal (%r14,%r12), %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
callq 0x14c24
movq 0x18(%rsp), %rdi
leal (%r14,%r12), %eax
addl $0x2, %eax
movb (%rdi,%rax), %al
andb $0x40, %al
shrb $0x6, %al
movzbl %al, %eax
leal (%rax,%rax,2), %eax
addl %eax, %r12d
addl $0xe, %r12d
jmp 0x16f2c
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
andb $0x1, %r13b
movzbl %r13b, %ecx
xorl %edx, %edx
callq 0x123f0
movzbl %bl, %eax
movb $0x14, %cl
divb %cl
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r12d
movl 0x14(%rsp), %r15d
subq $0x1, %r12
movq 0x18(%rsp), %rdi
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
xorl %edx, %edx
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x1295a
addl $0x14, %ebx
jmp 0x16f9a
xorl %ecx, %ecx
testb %r14b, %r14b
setne %cl
movq 0x18(%rsp), %rbx
movzbl (%rbx,%r12), %esi
movl $0x80, %edx
callq 0x123f0
movq 0x28(%rsp), %rdi
movq %r15, %rsi
movl %r14d, %edx
movq %rdi, %r14
callq 0x15022
movq %rbx, %rdi
jmp 0x1722f
movq %r15, %rsi
callq 0x1375c
jmp 0x17225
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
testb %r14b, %r14b
je 0x172ce
pushq $0x1
popq %rcx
movl $0xe8, %edx
jmp 0x172d5
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movzbl %bl, %eax
movb $0x6, %cl
divb %cl
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r14d
movl 0x14(%rsp), %r15d
subq $0x1, %r14
movq 0x18(%rsp), %rdi
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
callq 0x154ba
addl $0x6, %ebx
jmp 0x17054
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movzbl %bl, %eax
movb $0xb, %cl
divb %cl
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r14d
movl 0x14(%rsp), %r15d
subq $0x1, %r14
movq 0x18(%rsp), %rdi
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
callq 0x12f6e
addl $0xb, %ebx
jmp 0x170a2
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
movl %esi, %ebp
shrb $0x4, %bpl
movl %ebp, %r14d
andb $0x7, %r14b
addb $0x6, %r14b
pushq $0x10
popq %rdx
xorl %ecx, %ecx
callq 0x123f0
movzbl %bl, %eax
divb %r14b
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r14d
movzbl %bpl, %ebp
andl $0x7, %ebp
addl $0x6, %ebp
movl 0x14(%rsp), %r15d
subq $0x1, %r14
movq 0x18(%rsp), %rdi
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
xorl %edx, %edx
callq 0x15ad4
addl %ebp, %ebx
jmp 0x1710b
cmpb $0x2, %r14b
jb 0x172aa
movq 0x18(%rsp), %r13
movzbl (%r13,%r12), %esi
pushq $0x8
popq %rdx
pushq $0x2
popq %rcx
callq 0x123f0
movl 0x14(%rsp), %r15d
jmp 0x174af
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x13e72
jmp 0x1722a
movq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x14904
jmp 0x1722a
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movzbl %bl, %eax
movb $0x7, %cl
divb %cl
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r14d
movl 0x14(%rsp), %r15d
subq $0x1, %r14
movq 0x18(%rsp), %rdi
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
movq 0x28(%rsp), %rdi
callq 0x14610
addl $0x7, %ebx
jmp 0x171b0
leal 0x3(%rbx), %eax
movzbl (%rdi,%rax), %eax
shll $0x10, %eax
leal 0x4(%rbx), %ecx
movzbl (%rdi,%rcx), %ecx
shll $0x8, %ecx
orl %eax, %ecx
leal 0x5(%rbx), %eax
movzbl (%rdi,%rax), %ebx
orl %ecx, %ebx
movl $0x0, 0x7c(%rsp)
movl %ebx, %edi
xorl %esi, %esi
callq 0x4e65
testq %rax, %rax
movl %ebx, 0x14(%rsp)
je 0x17371
movq %rax, %r15
jmp 0x1738e
testb %bpl, %bpl
je 0x17236
movq %r15, %rsi
callq 0x15de6
movq 0x28(%rsp), %r14
movq 0x18(%rsp), %rdi
movl 0x14(%rsp), %r15d
jmp 0x1729a
addq $0x3, %r15
leaq 0x8256(%rip), %rdi      # 0x1f497
movq %r15, %rsi
movl %ebx, %edx
pushq $0x1
popq %rcx
pushq $0x10
popq %r8
callq 0x4fc1
movq 0x18(%rsp), %rdi
movl 0x14(%rsp), %r15d
testb $-0x21, 0x80(%rsp)
movq 0x28(%rsp), %r14
jne 0x1729a
movl 0xbc(%rsp), %eax
andb 0x91c(%r14), %al
testb $0x1, %al
jne 0x1729a
movq 0x20(%rsp), %rax
movq (%rax), %rdx
xorl %edi, %edi
leaq 0x1377e(%rip), %rsi     # 0x2aa0c
xorl %eax, %eax
callq 0x362c
movq 0x18(%rsp), %rdi
movq 0x30(%rsp), %rbx
addl 0x7c(%rsp), %ebx
xorl %ecx, %ecx
jmp 0x1662c
movq 0x18(%rsp), %rax
movzbl (%rax,%r12), %esi
cmpb $0x1, %r14b
movl 0x14(%rsp), %r15d
jne 0x174a1
pushq $0x8
popq %rdx
pushq $0x1
popq %rcx
jmp 0x174a5
movl $0xc8, %edx
xorl %ecx, %ecx
callq 0x123f0
movl 0x14(%rsp), %r15d
movq 0x18(%rsp), %rdi
testb $0x8, (%rdi,%r12)
jne 0x17324
movq 0x30(%rsp), %rax
leal 0x3(%rax), %ebp
movl %ebx, %ebx
subq $0x1, %rbx
jb 0x1725c
movb (%rdi,%r12), %al
shrb $0x6, %al
movl %ebp, %ecx
movzbl (%rdi,%rcx), %edx
movzbl %al, %esi
movq 0x28(%rsp), %rdi
xorl %ecx, %ecx
callq 0x135f0
movq 0x18(%rsp), %rdi
incl %ebp
jmp 0x172f5
shrl %ebx
movq 0x30(%rsp), %rax
leal 0x3(%rax), %r13d
subq $0x1, %rbx
jb 0x1725c
movb (%rdi,%r12), %al
shrb $0x6, %al
movl %r13d, %ecx
movzbl (%rdi,%rcx), %ecx
leal 0x1(%r13), %edx
movzbl (%rdi,%rdx), %edx
shll $0x8, %edx
orl %ecx, %edx
movzwl %dx, %edx
movzbl %al, %esi
movq 0x28(%rsp), %rdi
xorl %ecx, %ecx
callq 0x135f0
movq 0x18(%rsp), %rdi
addl $0x2, %r13d
jmp 0x1732f
movl %ebx, %edi
pushq $0x1
popq %rsi
callq 0x4e65
movq %rax, %r15
testq %rax, %rax
setne %al
movl %eax, 0x7c(%rsp)
je 0x1751b
leaq 0x58(%rsp), %rbx
movq %rbx, %rdi
leaq 0xdf11(%rip), %rsi      # 0x252ae
leaq 0xc8(%rsp), %rdx
callq 0x75c4
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x75a4
leaq 0x90(%rsp), %r15
movq %r15, %rdi
movq %r12, %rsi
leaq 0xf4db(%rip), %rdx      # 0x268ad
callq 0x75a4
movq 0x20(%rsp), %rdi
movq %r15, %rsi
callq 0x32f0
movq %r15, %rdi
callq 0x3130
movq %r12, %rdi
callq 0x3130
leaq 0x58(%rsp), %rdi
callq 0x3130
cmpb $0x0, 0x7c(%rsp)
je 0x17563
leaq 0x58(%rsp), %rdi
leaq 0x13453(%rip), %rsi     # 0x2a868
leaq 0x8f(%rsp), %rdx
callq 0x75c4
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
movl 0x14(%rsp), %esi
callq 0x4f51
leaq 0x38(%rsp), %r15
movq %r15, %rdi
leaq 0x58(%rsp), %rsi
movq %rbx, %rdx
callq 0x76b4
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
leaq 0x13410(%rip), %rdx     # 0x2a86d
callq 0x75a4
movq 0x90(%rsp), %rsi
xorl %edi, %edi
xorl %eax, %eax
callq 0x362c
leaq 0x90(%rsp), %rdi
callq 0x3130
leaq 0x38(%rsp), %rdi
callq 0x3130
leaq 0xc8(%rsp), %rdi
callq 0x3130
leaq 0x58(%rsp), %rdi
jmp 0x1755e
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x123f0
movq 0x18(%rsp), %r13
movzbl (%r13,%r12), %ebp
testb %r14b, %r14b
movq %r13, %rdi
je 0x174d5
movl %ebp, %eax
andl $0x8, %eax
je 0x174d5
leaq 0x143fc(%rip), %rdi     # 0x2b8c7
callq 0x33b0
movq 0x18(%rsp), %rdi
shrl $0x4, %ebp
andl $0x7, %ebp
addl $0x14, %ebp
movzbl %bl, %eax
divb %bpl
movq 0x30(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %r12d
subq $0x1, %r12
jb 0x1725c
movl %ebx, %esi
addq %rdi, %rsi
pushq $0x1
popq %rdx
movq 0x28(%rsp), %rdi
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x1295a
movq 0x18(%rsp), %rdi
addl %ebp, %ebx
jmp 0x174f0
leaq 0x38(%rsp), %r15
movq %r15, %rdi
movl 0x14(%rsp), %esi
callq 0x4f51
leaq 0x90(%rsp), %r12
movq %r12, %rdi
leaq 0x1330e(%rip), %rsi     # 0x2a84c
movq %r15, %rdx
callq 0xbafb
movq 0x20(%rsp), %rdi
movq %r12, %rsi
callq 0x32f0
movq %r12, %rdi
callq 0x3130
movq %r15, %rdi
callq 0x3130
cmpl $0x3a0292, 0x14(%rsp)   # imm = 0x3A0292
sete %r12b
jmp 0x16abe
cmpl $0x0, 0x80(%rsp)
jne 0x17586
incl %ebx
cmpb $0x0, (%rdi,%rbx)
je 0x175de
leaq 0x1339e(%rip), %rsi     # 0x2a92b
xorl %edi, %edi
movl %r13d, %edx
xorl %eax, %eax
callq 0x362c
jmp 0x175d9
leaq 0x133e4(%rip), %rsi     # 0x2a986
xorl %edi, %edi
movl %r13d, %ecx
xorl %eax, %eax
callq 0x362c
jmp 0x175d9
movq %r15, %rdi
movl %r13d, %esi
xorl %edx, %edx
callq 0x4fa5
movq 0x18(%rsp), %rdi
testb %al, %al
movq %r12, %r14
jne 0x175de
leaq 0x13410(%rip), %rsi     # 0x2a9e0
xorl %edi, %edi
xorl %eax, %eax
callq 0x362c
movq 0x18(%rsp), %rdi
andq $0x0, 0x38(%r14)
movq 0x30(%r14), %rax
movb $0x0, (%rax)
movzbl 0x2(%rdi), %edx
addq $0x5, %rdx
movq %rdi, %rbx
leaq 0x7e9d(%rip), %rdi      # 0x1f499
movq 0xc0(%rsp), %r15
movq %r15, %rsi
callq 0x3876
movzbl 0x2(%rbx), %eax
leaq (%r15,%rax), %rdi
addq $0x5, %rdi
pushq $0x79
popq %rsi
subl %eax, %esi
xorl %edx, %edx
callq 0x4fa5
testb %al, %al
jne 0x17649
leaq 0xe041(%rip), %rsi      # 0x25670
movq 0x20(%rsp), %rdi
callq 0x3460
leaq 0x13402(%rip), %rsi     # 0x2aa42
xorl %edi, %edi
xorl %eax, %eax
callq 0x362c
movb $0x0, 0x91c(%r14)
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
jmp 0x176e7
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x3130
jmp 0x17682
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x3130
jmp 0x17691
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
jmp 0x176d8
jmp 0x176df
jmp 0x176a3
jmp 0x176d0
jmp 0x176df
movq %rax, %rbx
jmp 0x176ec
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
jmp 0x176d0
jmp 0x176df
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x3130
jmp 0x176e2
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x3130
movq %rbx, %rdi
callq 0x3430
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
jmp 0x176e7
nop