// File: /workspace/github_c_makefile_star2_O3/OstCollector[P]config2c/config2c.c
// Function: parse_struct
static void parse_struct(string name, const struct node_member_list *list)
{
	const struct node_member_list *memb;
	const struct node_alter_list *alt;
	long cnt, idx;
	struct type_decl decl;
	struct parse_opts opts;

	cnt = len_member_list(list);
	opts.mode = PARSE_STRUCT;

	osi(0, "static int parse__struct_%s(struct pass_to_conv *ctx, struct %s *value, "
			"const struct node_value *input)\n", name, name);
	osi(0, "{\n");
	osi(1, "int inited[%ld] = {};\n", cnt);
	osi(1, "int ret;\n");
	osi(1, "long i, len;\n");
	osi(1, "struct node_members *memb, default_memb;\n");
	osi(1, "struct node_elems *elem;\n");
	osi(1, "struct pass_to_bison opaque;\n");
	for (memb = list, idx = 0; memb; memb = memb->next, ++idx) {
		if (memb->default_val) {
			osi(1, "const char *default_%ld = %s;\n",
					idx, memb->default_val);
		}
	}
	osi(1, "if (input->type != VAL_MEMBERS) {\n");
	osi(2, "ctx->node = input;\n");
	osi(2, "ctx->msg = \"invalid type, expecting list of members.\";\n");
	osi(2, "return -EINVAL;\n");
	osi(1, "}\n"); /* if */
	opts.is_default = 0;
	osi(1, "for (memb = input->members; memb; memb = memb->next) {\n");
	osi(2, "if (0) {\n");
	osi(3, ";\n");
	osi(2, "}\n");
	for (memb = list, idx = 0; memb; memb = memb->next, ++idx) {
		if (!memb->visible) {
			continue;
		}
		switch (memb->type) {
		case NODE_MEMBER_DEF_PRIM:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_PRIM;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_ENUM:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_ENUM;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_STRUCT:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_STRUCT;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_UNION:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_UNION;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_UNNAMED_UNION:
			opts.s.idx = idx;
			opts.s.opt_var = memb->alt_enum;
			for (alt = memb->alters; alt; alt = alt->next) {
				switch (alt->type) {
				case NODE_ALTER_DEF_PRIM:
					opts.s.idx = idx;
					opts.s.opt_val = alt->enum_val;
					decl.type = TYPE_DECL_PRIM;
					decl.type_name = alt->type_name;
					helper_parse(&alt->vec, &decl, alt->in_name,
							alt->mapped, &opts, 2);
					break;
				case NODE_ALTER_DEF_ENUM:
					opts.s.idx = idx;
					opts.s.opt_val = alt->enum_val;
					decl.type = TYPE_DECL_ENUM;
					decl.type_name = alt->type_name;
					helper_parse(&alt->vec, &decl, alt->in_name,
							alt->mapped, &opts, 2);
					break;
				case NODE_ALTER_DEF_STRUCT:
					opts.s.idx = idx;
					opts.s.opt_val = alt->enum_val;
					decl.type = TYPE_DECL_STRUCT;
					decl.type_name = alt->type_name;
					helper_parse(&alt->vec, &decl, alt->in_name,
							alt->mapped, &opts, 2);
					break;
				default:
					fprintf(stderr, "error at %d (%s) : impossible err\n",
							__LINE__, __func__);
					exit(EXIT_FAILURE);
				}
			}
		}
	}
	osi(2, "ctx->node = memb->value;\n");
	osi(2, "ctx->msg = \"unknown member.\";\n");
	osi(2, "ret = -EINVAL;\n");
	osi(2, "goto error_all;\n");
	osi(1, "}\n"); /* for */
	opts.is_default = 1;
	for (memb = list, idx = 0; memb; memb = memb->next, ++idx) {
		if (memb->visible && !memb->default_val) {
			osi(1, "if (!inited[%ld]) {\n", idx);
			osi(2, "ctx->node = input;\n");
			osi(2, "ctx->msg = \"some field is not initialized.\";\n");
			osi(2, "ret = -EINVAL;\n");
			osi(2, "goto error_all;\n");
			osi(1, "}\n"); /* if */
			continue;
		}
		if (!memb->default_val) {
			continue;
		}
		osi(1, "if (!inited[%ld]) {\n", idx);
		osi(2, "init_pass_to_bison(&opaque, ctx->pool);\n");
		osi(2, "ret = yacc_parse_string(default_%ld, &ctx->msg, &opaque);\n", idx);
		osi(2, "if (ret) {\n");
		osi(3, "ctx->node = input;\n");
		osi(3, "goto error_all;\n");
		osi(2, "}\n"); /* if ret */
		if (memb->type != NODE_MEMBER_DEF_UNNAMED_UNION) {
			osi(2, "default_memb.next = NULL;\n");
			osi(2, "default_memb.name = \"%s\";\n", memb->in_name);
			osi(2, "default_memb.value = opaque.output;\n");
			osi(2, "default_memb.value->parent = input;\n");
			osi(2, "default_memb.value->name_copy = \"%s\";\n", memb->in_name);
			osi(2, "memb = &default_memb;\n");
		} else {
			osi(2, "if (opaque.output->type != VAL_MEMBERS) {\n");
			osi(3, "ctx->node = input;\n");
			osi(3, "ctx->msg = \"invalid initial value: "
					"value not selected\";\n");
			osi(2, "}\n"); /* if invalid type */
			
			osi(2, "if (len_node_members(opaque.output->members) != 1) {\n");
			osi(3, "ctx->node = input;\n");
			osi(3, "ctx->msg = \"invalid initial value: "
					"multiple value selected\";\n");
			osi(2, "}\n"); /* if invalid type */

			osi(2, "memb = opaque.output->members;\n");
			osi(2, "memb->value->parent = input;\n");
		}
		osi(2, "if (0) {\n");
		osi(3, ";\n");
		osi(2, "}\n");
		switch (memb->type) {
		case NODE_MEMBER_DEF_PRIM:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_PRIM;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_ENUM:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_ENUM;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_STRUCT:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_STRUCT;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_UNION:
			opts.s.idx = idx;
			opts.s.opt_var = NULL;
			opts.s.opt_val = NULL;
			decl.type = TYPE_DECL_UNION;
			decl.type_name = memb->type_name;
			helper_parse(&memb->vec, &decl, memb->in_name,
					memb->mapped, &opts, 2);
			break;
		case NODE_MEMBER_DEF_UNNAMED_UNION:
			opts.s.idx = idx;
			opts.s.opt_var = memb->alt_enum;
			for (alt = memb->alters; alt; alt = alt->next) {
				switch (alt->type) {
				case NODE_ALTER_DEF_PRIM:
					opts.s.idx = idx;
					opts.s.opt_val = alt->enum_val;
					decl.type = TYPE_DECL_PRIM;
					decl.type_name = alt->type_name;
					helper_parse(&alt->vec, &decl, alt->in_name,
							alt->mapped, &opts, 2);
					break;
				case NODE_ALTER_DEF_ENUM:
					opts.s.idx = idx;
					opts.s.opt_val = alt->enum_val;
					decl.type = TYPE_DECL_ENUM;
					decl.type_name = alt->type_name;
					helper_parse(&alt->vec, &decl, alt->in_name,
							alt->mapped, &opts, 2);
					break;
				case NODE_ALTER_DEF_STRUCT:
					opts.s.idx = idx;
					opts.s.opt_val = alt->enum_val;
					decl.type = TYPE_DECL_STRUCT;
					decl.type_name = alt->type_name;
					helper_parse(&alt->vec, &decl, alt->in_name,
							alt->mapped, &opts, 2);
					break;
				default:
					fprintf(stderr, "error at %d (%s) : impossible err\n",
							__LINE__, __func__);
					exit(EXIT_FAILURE);
				}
			}
		}
		osi(2, "else {\n");
		osi(3, "ctx->node = memb->value;\n");
		osi(3, "ctx->msg = \"unknown member.\";\n");
		osi(3, "ret = -EINVAL;\n");
		osi(3, "goto error_all;\n");
		osi(2, "}\n");
		osi(1, "}\n"); /* if !inited */
	}
	osi(1, "return 0;\n");
	osi(0, "error_all:\n");
	for (memb = list, idx = 0; memb; memb = memb->next, ++idx) {
		if (!memb->visible && !memb->default_val) {
			continue;
		}
		osi(1, "if (inited[%ld]) {\n", idx);
		switch (memb->type) {
		case NODE_MEMBER_DEF_PRIM:
			decl.type = TYPE_DECL_PRIM;
			decl.type_name = memb->type_name;
			helper_free(&memb->vec, &decl, memb->mapped, 2);
			break;
		case NODE_MEMBER_DEF_ENUM:
			decl.type = TYPE_DECL_ENUM;
			decl.type_name = memb->type_name;
			helper_free(&memb->vec, &decl, memb->mapped, 2);
			break;
		case NODE_MEMBER_DEF_STRUCT:
			decl.type = TYPE_DECL_STRUCT;
			decl.type_name = memb->type_name;
			helper_free(&memb->vec, &decl, memb->mapped, 2);
			break;
		case NODE_MEMBER_DEF_UNION:
			decl.type = TYPE_DECL_UNION;
			decl.type_name = memb->type_name;
			helper_free(&memb->vec, &decl, memb->mapped, 2);
			break;
		case NODE_MEMBER_DEF_UNNAMED_UNION:
			for (alt = memb->alters; alt; alt = alt->next) {
				osi(2, "if (value->%s == %s) {\n",
						memb->alt_enum, alt->enum_val);
				switch (alt->type) {
				case NODE_ALTER_DEF_PRIM:
					decl.type = TYPE_DECL_PRIM;
					decl.type_name = alt->type_name;
					helper_free(&alt->vec, &decl, 
							alt->mapped, 3);
					break;
				case NODE_ALTER_DEF_ENUM:
					decl.type = TYPE_DECL_ENUM;
					decl.type_name = alt->type_name;
					helper_free(&alt->vec, &decl, 
							alt->mapped, 3);
					break;
				case NODE_ALTER_DEF_STRUCT:
					decl.type = TYPE_DECL_STRUCT;
					decl.type_name = alt->type_name;
					helper_free(&alt->vec, &decl, 
							alt->mapped, 3);
					break;
				}
				osi(2, "}\n"); /* if */
			}
		}
		osi(1, "}\n"); /* if */
	}
	osi(1, "return ret;\n");
	osi(0, "}\n");
	osi(0, "\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rsi, %rbx
movq %rdi, %rcx
xorl %r14d, %r14d
testq %rsi, %rsi
je 0x8e80
movq %rbx, %rax
incq %r14
movq (%rax), %rax
testq %rax, %rax
jne 0x8e75
movl $0x0, -0x60(%rbp)
movq 0x11412(%rip), %rdi     # 0x1a2a0
leaq 0x87d0(%rip), %rsi      # 0x11665
movq %rcx, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e33
movq 0x113f2(%rip), %rdi     # 0x1a2a0
leaq 0x98e4(%rip), %rsi      # 0x12799
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e38
movl $0x1, %edi
callq 0xa3ac
movq 0x113cb(%rip), %rdi     # 0x1a2a0
leaq 0x87f2(%rip), %rsi      # 0x116ce
movq %r14, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e3d
movl $0x1, %edi
callq 0xa3ac
movq 0x113a1(%rip), %rdi     # 0x1a2a0
leaq 0x87df(%rip), %rsi      # 0x116e5
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e42
movl $0x1, %edi
callq 0xa3ac
movq 0x1137a(%rip), %rdi     # 0x1a2a0
leaq 0x87c2(%rip), %rsi      # 0x116ef
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e47
movl $0x1, %edi
callq 0xa3ac
movq 0x11353(%rip), %rdi     # 0x1a2a0
leaq 0x87a9(%rip), %rsi      # 0x116fd
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e4c
movl $0x1, %edi
callq 0xa3ac
movq 0x1132c(%rip), %rdi     # 0x1a2a0
leaq 0x87ac(%rip), %rsi      # 0x11727
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e51
movl $0x1, %edi
callq 0xa3ac
movq 0x11305(%rip), %rdi     # 0x1a2a0
leaq 0x879f(%rip), %rsi      # 0x11741
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e56
movq %rbx, -0x68(%rbp)
testq %rbx, %rbx
je 0x9004
leaq 0x879e(%rip), %r14      # 0x1175f
xorl %r15d, %r15d
movq -0x68(%rbp), %rbx
cmpq $0x0, 0x38(%rbx)
je 0x8ff9
movl $0x1, %edi
callq 0xa3ac
movq 0x112c0(%rip), %rdi     # 0x1a2a0
movq 0x38(%rbx), %rcx
movq %r14, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d6b
movq (%rbx), %rbx
incq %r15
testq %rbx, %rbx
jne 0x8fc8
movl $0x1, %edi
callq 0xa3ac
movq 0x1128b(%rip), %rdi     # 0x1a2a0
leaq 0x8762(%rip), %rsi      # 0x1177e
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e5b
movl $0x2, %edi
callq 0xa3ac
movq 0x11264(%rip), %rdi     # 0x1a2a0
leaq 0x875e(%rip), %rsi      # 0x117a1
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
movq -0x68(%rbp), %rbx
js 0x9e60
movl $0x2, %edi
callq 0xa3ac
movq 0x11239(%rip), %rdi     # 0x1a2a0
leaq 0x8747(%rip), %rsi      # 0x117b5
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e65
movl $0x2, %edi
callq 0xa3ac
movq 0x11212(%rip), %rdi     # 0x1a2a0
leaq 0x8758(%rip), %rsi      # 0x117ed
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e6a
movl $0x1, %edi
callq 0xa3ac
movq 0x111eb(%rip), %rdi     # 0x1a2a0
leaq 0x7d85(%rip), %rsi      # 0x10e41
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e6f
movl $0x0, -0x40(%rbp)
movl $0x1, %edi
callq 0xa3ac
movq 0x111bd(%rip), %rdi     # 0x1a2a0
leaq 0x8714(%rip), %rsi      # 0x117fe
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e74
movl $0x2, %edi
callq 0xa3ac
movq 0x11196(%rip), %rdi     # 0x1a2a0
leaq 0x8725(%rip), %rsi      # 0x11836
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e79
movl $0x3, %edi
callq 0xa3ac
movq 0x1116f(%rip), %rdi     # 0x1a2a0
leaq 0x8b3b(%rip), %rsi      # 0x11c73
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e7e
movl $0x2, %edi
callq 0xa3ac
movq 0x11148(%rip), %rdi     # 0x1a2a0
leaq 0x7ce2(%rip), %rsi      # 0x10e41
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e83
testq %rbx, %rbx
je 0x92cc
xorl %r12d, %r12d
leaq -0x38(%rbp), %r14
leaq -0x60(%rbp), %r15
movq -0x68(%rbp), %rbx
cmpl $0x0, 0x40(%rbx)
je 0x92bd
movl 0x8(%rbx), %eax
cmpq $0x4, %rax
ja 0x92bd
leaq 0x6e90(%rip), %rcx      # 0x10034
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x0, -0x38(%rbp)
jmp 0x929e
movq %r12, -0x58(%rbp)
movq 0x18(%rbx), %rax
movq %rax, -0x50(%rbp)
movq 0x10(%rbx), %r13
testq %r13, %r13
je 0x92bd
movl 0x8(%r13), %eax
cmpl $0x2, %eax
je 0x9220
cmpl $0x1, %eax
je 0x920b
testl %eax, %eax
jne 0x9d61
movq %r12, -0x58(%rbp)
movq 0x38(%r13), %rax
movq %rax, -0x48(%rbp)
movl $0x0, -0x38(%rbp)
jmp 0x9233
movq %r12, -0x58(%rbp)
movq 0x38(%r13), %rax
movq %rax, -0x48(%rbp)
movl $0x1, -0x38(%rbp)
jmp 0x9233
movq %r12, -0x58(%rbp)
movq 0x38(%r13), %rax
movq %rax, -0x48(%rbp)
movl $0x2, -0x38(%rbp)
movq 0x10(%r13), %rax
movq %rax, -0x30(%rbp)
leaq 0x28(%r13), %rdi
movq 0x18(%r13), %rdx
movq 0x20(%r13), %rcx
movq %r14, %rsi
movq %r15, %r8
callq 0xacf9
movq (%r13), %r13
jmp 0x91d7
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x2, -0x38(%rbp)
jmp 0x929e
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x3, -0x38(%rbp)
jmp 0x929e
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x1, -0x38(%rbp)
movq 0x10(%rbx), %rax
movq %rax, -0x30(%rbp)
leaq 0x28(%rbx), %rdi
movq 0x18(%rbx), %rdx
movq 0x20(%rbx), %rcx
movq %r14, %rsi
movq %r15, %r8
callq 0xacf9
movq (%rbx), %rbx
incq %r12
testq %rbx, %rbx
jne 0x9186
movl $0x2, %edi
callq 0xa3ac
movq 0x10fc3(%rip), %rdi     # 0x1a2a0
leaq 0x858c(%rip), %rsi      # 0x11870
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e88
movl $0x2, %edi
callq 0xa3ac
movq 0x10f9c(%rip), %rdi     # 0x1a2a0
leaq 0x857f(%rip), %rsi      # 0x1188a
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
movq -0x68(%rbp), %rbx
js 0x9e8d
movl $0x2, %edi
callq 0xa3ac
movq 0x10f71(%rip), %rdi     # 0x1a2a0
leaq 0x8573(%rip), %rsi      # 0x118a9
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e92
movl $0x2, %edi
callq 0xa3ac
movq 0x10f4a(%rip), %rdi     # 0x1a2a0
leaq 0x855c(%rip), %rsi      # 0x118b9
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e97
movl $0x1, %edi
callq 0xa3ac
movq 0x10f23(%rip), %rdi     # 0x1a2a0
leaq 0x7abd(%rip), %rsi      # 0x10e41
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e9c
movl $0x1, -0x40(%rbp)
testq %rbx, %rbx
je 0x9af8
leaq 0x850f(%rip), %r15      # 0x118b9
leaq 0x7a90(%rip), %r13      # 0x10e41
xorl %r12d, %r12d
movq -0x68(%rbp), %rbx
cmpl $0x0, 0x40(%rbx)
movq 0x38(%rbx), %rax
je 0x94b9
testq %rax, %rax
jne 0x94c2
movl $0x1, %edi
callq 0xa3ac
movq 0x10ec0(%rip), %rdi     # 0x1a2a0
leaq 0x84e3(%rip), %rsi      # 0x118ca
movq %r12, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e15
movl $0x2, %edi
callq 0xa3ac
movq 0x10e96(%rip), %rdi     # 0x1a2a0
leaq 0x8390(%rip), %rsi      # 0x117a1
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e2e
movl $0x2, %edi
callq 0xa3ac
movq 0x10e6f(%rip), %rdi     # 0x1a2a0
leaq 0x84a7(%rip), %rsi      # 0x118df
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e29
movl $0x2, %edi
callq 0xa3ac
movq 0x10e48(%rip), %rdi     # 0x1a2a0
leaq 0x844a(%rip), %rsi      # 0x118a9
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e24
movl $0x2, %edi
callq 0xa3ac
movq 0x10e21(%rip), %rdi     # 0x1a2a0
movq %r15, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e1f
movl $0x1, %edi
callq 0xa3ac
movq 0x10dfe(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
jns 0x9ae9
jmp 0x9e1a
testq %rax, %rax
je 0x9ae9
movl $0x1, %edi
callq 0xa3ac
movq 0x10dcd(%rip), %rdi     # 0x1a2a0
leaq 0x83f0(%rip), %rsi      # 0x118ca
movq %r12, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d93
movl $0x2, %edi
callq 0xa3ac
movq 0x10da3(%rip), %rdi     # 0x1a2a0
leaq 0x8409(%rip), %rsi      # 0x1190d
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9da7
movl $0x2, %edi
callq 0xa3ac
movq 0x10d7c(%rip), %rdi     # 0x1a2a0
leaq 0x840b(%rip), %rsi      # 0x11936
movq %r12, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dbb
movl $0x2, %edi
callq 0xa3ac
movq 0x10d52(%rip), %rdi     # 0x1a2a0
leaq 0x756b(%rip), %rsi      # 0x10ac0
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d7a
movl $0x3, %edi
callq 0xa3ac
movq 0x10d2b(%rip), %rdi     # 0x1a2a0
leaq 0x8225(%rip), %rsi      # 0x117a1
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d89
movl $0x3, %edi
callq 0xa3ac
movq 0x10d04(%rip), %rdi     # 0x1a2a0
movq %r15, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d9d
movl $0x2, %edi
callq 0xa3ac
movq 0x10ce1(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9db1
movl 0x8(%rbx), %r14d
movl $0x2, %edi
callq 0xa3ac
movq 0x10cba(%rip), %rdi     # 0x1a2a0
cmpl $0x4, %r14d
jne 0x9762
leaq 0x8438(%rip), %rsi      # 0x11a2f
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e0b
movl $0x3, %edi
callq 0xa3ac
movq 0x10c89(%rip), %rdi     # 0x1a2a0
leaq 0x8183(%rip), %rsi      # 0x117a1
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dfc
movl $0x3, %edi
callq 0xa3ac
movq 0x10c62(%rip), %rdi     # 0x1a2a0
leaq 0x8415(%rip), %rsi      # 0x11a5a
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9de8
movl $0x2, %edi
callq 0xa3ac
movq 0x10c3b(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dd9
movl $0x2, %edi
callq 0xa3ac
movq 0x10c18(%rip), %rdi     # 0x1a2a0
leaq 0x8404(%rip), %rsi      # 0x11a93
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dca
movl $0x3, %edi
callq 0xa3ac
movq 0x10bf1(%rip), %rdi     # 0x1a2a0
leaq 0x80eb(%rip), %rsi      # 0x117a1
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e10
movl $0x3, %edi
callq 0xa3ac
movq 0x10bca(%rip), %rdi     # 0x1a2a0
leaq 0x83ec(%rip), %rsi      # 0x11ac9
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e01
movl $0x2, %edi
callq 0xa3ac
movq 0x10ba3(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9ded
movl $0x2, %edi
callq 0xa3ac
movq 0x10b80(%rip), %rdi     # 0x1a2a0
leaq 0x83e0(%rip), %rsi      # 0x11b07
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dde
movl $0x2, %edi
callq 0xa3ac
movq 0x10b59(%rip), %rdi     # 0x1a2a0
leaq 0x83d9(%rip), %rsi      # 0x11b27
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
jns 0x9843
jmp 0x9dcf
leaq 0x8208(%rip), %rsi      # 0x11971
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9df2
movl $0x2, %edi
callq 0xa3ac
movq 0x10b17(%rip), %rdi     # 0x1a2a0
movq 0x18(%rbx), %rdx
leaq 0x81f8(%rip), %rsi      # 0x1198c
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9de3
movl $0x2, %edi
callq 0xa3ac
movq 0x10aec(%rip), %rdi     # 0x1a2a0
leaq 0x81ec(%rip), %rsi      # 0x119a7
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dd4
movl $0x2, %edi
callq 0xa3ac
movq 0x10ac5(%rip), %rdi     # 0x1a2a0
leaq 0x81ea(%rip), %rsi      # 0x119cc
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dc5
movl $0x2, %edi
callq 0xa3ac
movq 0x10a9e(%rip), %rdi     # 0x1a2a0
movq 0x18(%rbx), %rdx
leaq 0x81e4(%rip), %rsi      # 0x119f1
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9e06
movl $0x2, %edi
callq 0xa3ac
movq 0x10a73(%rip), %rdi     # 0x1a2a0
leaq 0x81e4(%rip), %rsi      # 0x11a18
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9df7
movl $0x2, %edi
callq 0xa3ac
movq 0x10a4c(%rip), %rdi     # 0x1a2a0
leaq 0x7fdb(%rip), %rsi      # 0x11836
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d75
movl $0x3, %edi
callq 0xa3ac
movq 0x10a25(%rip), %rdi     # 0x1a2a0
leaq 0x83f1(%rip), %rsi      # 0x11c73
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d84
movl $0x2, %edi
callq 0xa3ac
movq 0x109fe(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d98
movl 0x8(%rbx), %eax
cmpq $0x4, %rax
ja 0x99e4
leaq 0x6780(%rip), %rcx      # 0x10048
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x0, -0x38(%rbp)
jmp 0x99c3
movq %r12, -0x58(%rbp)
movq 0x18(%rbx), %rax
movq %rax, -0x50(%rbp)
movq 0x10(%rbx), %r14
testq %r14, %r14
je 0x99e4
movl 0x8(%r14), %eax
cmpl $0x2, %eax
je 0x9944
cmpl $0x1, %eax
je 0x992f
testl %eax, %eax
jne 0x9d66
movq %r12, -0x58(%rbp)
movq 0x38(%r14), %rax
movq %rax, -0x48(%rbp)
movl $0x0, -0x38(%rbp)
jmp 0x9957
movq %r12, -0x58(%rbp)
movq 0x38(%r14), %rax
movq %rax, -0x48(%rbp)
movl $0x1, -0x38(%rbp)
jmp 0x9957
movq %r12, -0x58(%rbp)
movq 0x38(%r14), %rax
movq %rax, -0x48(%rbp)
movl $0x2, -0x38(%rbp)
movq 0x10(%r14), %rax
movq %rax, -0x30(%rbp)
leaq 0x28(%r14), %rdi
movq 0x18(%r14), %rdx
movq 0x20(%r14), %rcx
leaq -0x38(%rbp), %rsi
leaq -0x60(%rbp), %r8
callq 0xacf9
movq (%r14), %r14
jmp 0x98fb
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x2, -0x38(%rbp)
jmp 0x99c3
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x3, -0x38(%rbp)
jmp 0x99c3
movq %r12, -0x58(%rbp)
leaq -0x50(%rbp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movl $0x1, -0x38(%rbp)
movq 0x10(%rbx), %rax
movq %rax, -0x30(%rbp)
leaq 0x28(%rbx), %rdi
movq 0x18(%rbx), %rdx
movq 0x20(%rbx), %rcx
leaq -0x38(%rbp), %rsi
leaq -0x60(%rbp), %r8
callq 0xacf9
movl $0x2, %edi
callq 0xa3ac
movq 0x108ab(%rip), %rdi     # 0x1a2a0
leaq 0x711a(%rip), %rsi      # 0x10b16
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dac
movl $0x3, %edi
callq 0xa3ac
movq 0x10884(%rip), %rdi     # 0x1a2a0
leaq 0x7e4d(%rip), %rsi      # 0x11870
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9dc0
movl $0x3, %edi
callq 0xa3ac
movq 0x1085d(%rip), %rdi     # 0x1a2a0
leaq 0x7e40(%rip), %rsi      # 0x1188a
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d7f
movl $0x3, %edi
callq 0xa3ac
movq 0x10836(%rip), %rdi     # 0x1a2a0
leaq 0x7e38(%rip), %rsi      # 0x118a9
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d8e
movl $0x3, %edi
callq 0xa3ac
movq 0x1080f(%rip), %rdi     # 0x1a2a0
movq %r15, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9da2
movl $0x2, %edi
callq 0xa3ac
movq 0x107ec(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9db6
movl $0x1, %edi
callq 0xa3ac
movq 0x107c9(%rip), %rdi     # 0x1a2a0
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d70
movq (%rbx), %rbx
incq %r12
testq %rbx, %rbx
jne 0x93b8
movl $0x1, %edi
callq 0xa3ac
movq 0x10797(%rip), %rdi     # 0x1a2a0
leaq 0x7359(%rip), %rsi      # 0x10e69
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9ea1
movq 0x1077a(%rip), %rdi     # 0x1a2a0
leaq 0x8018(%rip), %rsi      # 0x11b45
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
movq -0x68(%rbp), %rbx
js 0x9ea6
testq %rbx, %rbx
je 0x9cdd
leaq 0x72f1(%rip), %r15      # 0x10e41
leaq 0x800e(%rip), %r13      # 0x11b65
xorl %r14d, %r14d
cmpl $0x0, 0x40(%rbx)
jne 0x9b6b
cmpq $0x0, 0x38(%rbx)
je 0x9cce
movl $0x1, %edi
callq 0xa3ac
movq 0x10724(%rip), %rdi     # 0x1a2a0
leaq 0x7fce(%rip), %rsi      # 0x11b51
movq %r14, %rdx
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d5c
movq %rbx, %r12
movl 0x8(%rbx), %eax
cmpq $0x4, %rax
ja 0x9ca8
leaq 0x64b0(%rip), %rcx      # 0x1005c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x0, -0x38(%rbp)
jmp 0x9c87
leaq 0x10(%r12), %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x9ca8
movl $0x2, %edi
callq 0xa3ac
movq 0x106bd(%rip), %rdi     # 0x1a2a0
movq 0x18(%r12), %rdx
movq 0x38(%rbx), %rcx
movq %r13, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9d52
movl 0x8(%rbx), %eax
cmpl $0x2, %eax
je 0x9c21
cmpl $0x1, %eax
je 0x9c18
testl %eax, %eax
jne 0x9c46
movl $0x0, -0x38(%rbp)
jmp 0x9c28
movl $0x1, -0x38(%rbp)
jmp 0x9c28
movl $0x2, -0x38(%rbp)
movq 0x10(%rbx), %rax
movq %rax, -0x30(%rbp)
leaq 0x28(%rbx), %rdi
movq 0x20(%rbx), %rdx
leaq -0x38(%rbp), %rsi
movl $0x3, %ecx
callq 0xc328
movl $0x2, %edi
callq 0xa3ac
movq 0x10649(%rip), %rdi     # 0x1a2a0
movq %r15, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
jns 0x9bc6
jmp 0x9d4d
movl $0x2, -0x38(%rbp)
jmp 0x9c87
movl $0x3, -0x38(%rbp)
jmp 0x9c87
movl $0x1, -0x38(%rbp)
movq 0x10(%r12), %rax
movq %rax, -0x30(%rbp)
leaq 0x28(%r12), %rdi
movq 0x20(%r12), %rdx
leaq -0x38(%rbp), %rsi
movl $0x2, %ecx
callq 0xc328
movl $0x1, %edi
callq 0xa3ac
movq 0x105e7(%rip), %rdi     # 0x1a2a0
movq %r15, %rsi
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
movq %r12, %rbx
js 0x9d57
movq (%rbx), %rbx
incq %r14
testq %rbx, %rbx
jne 0x9b5a
movl $0x1, %edi
callq 0xa3ac
movq 0x105b2(%rip), %rdi     # 0x1a2a0
leaq 0x7e88(%rip), %rsi      # 0x11b7d
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9eab
movq 0x10595(%rip), %rdi     # 0x1a2a0
leaq 0x712f(%rip), %rsi      # 0x10e41
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9eb0
movq 0x10578(%rip), %rdi     # 0x1a2a0
leaq 0x7458(%rip), %rsi      # 0x11187
xorl %eax, %eax
callq 0x2100
testl %eax, %eax
js 0x9eb5
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x37d0
callq 0x37fb
callq 0x3826
callq 0x3851
callq 0x30e3
callq 0x3317
callq 0x30b8
callq 0x3347
callq 0x34ca
callq 0x3724
callq 0x33f3
callq 0x349f
callq 0x36f9
callq 0x33c8
callq 0x37a5
callq 0x3474
callq 0x36ce
callq 0x339d
callq 0x377a
callq 0x3449
callq 0x36a3
callq 0x3372
callq 0x374f
callq 0x341e
callq 0x326b
callq 0x35cc
callq 0x34f5
callq 0x3296
callq 0x35f7
callq 0x3520
callq 0x32c1
callq 0x3622
callq 0x354b
callq 0x32ec
callq 0x3215
callq 0x364d
callq 0x3576
callq 0x3240
callq 0x3678
callq 0x35a1
callq 0x31ea
callq 0x3113
callq 0x313e
callq 0x3169
callq 0x3194
callq 0x31bf
callq 0x3cda
callq 0x3caf
callq 0x3c84
callq 0x3c59
callq 0x3c2e
callq 0x3c03
callq 0x3bd8
callq 0x3bad
callq 0x3b82
callq 0x3b57
callq 0x3b2c
callq 0x3b01
callq 0x3ad6
callq 0x3aab
callq 0x3a80
callq 0x3a55
callq 0x3a2a
callq 0x39ff
callq 0x39d4
callq 0x39a9
callq 0x397e
callq 0x3953
callq 0x3928
callq 0x38fd
callq 0x38d2
callq 0x38a7
callq 0x387c