// File: /workspace/github_c_makefile_star2_O3/mattn[P]orelang/ore.c
// Function: ore_eval
static ore_value
ore_eval(ore_context* ore, mpc_ast_t* t) {
  int i, r;
  if (!t) return ore_value_nil();

  khiter_t k;
  k = kh_get(ast, ore->ast, (khint64_t)(uintptr_t)t);
  if (k != kh_end(ore->ast)) {
    return kh_value(ore->ast, k);
  }

  if (is_a(t, "eof") || is_a(t, "comment")) {
    return ore_value_nil();
  }
  if (is_a(t, "true")) {
    return ore_value_true();
  }
  if (is_a(t, "false")) {
    return ore_value_false();
  }
  if (is_a(t, "nil")) {
    return ore_value_nil();
  }
  if (is_a(t, "number")) {
	ore_value v = ore_parse_num(ore, t->contents);
	k = kh_put(ast, ore->ast, (khint64_t)(uintptr_t)t, &r);
	kh_value(ore->ast, k) = v;
    return v;
  }
  if (is_a(t, "string")) {
	ore_value v = ore_parse_str(ore, t->contents);
	k = kh_put(ast, ore->ast, (khint64_t)(uintptr_t)t, &r);
	kh_value(ore->ast, k) = v;
    return v;
  }
  if (is_a(t, "array")) {
    ore_array_t* a = kl_init(value);
    for (i = 1; i < t->children_num - 1; i += 2) {
      *kl_pushp(value, a) = ore_eval(ore, t->children[i]);
    }
    return ore_value_array_from_klist(ore, a);
  }
  if (is_a(t, "hash")) {
    ore_hash_t* h = kh_init(value);
    for (i = 1; i < t->children_num - 1; i += 2) {
      ore_value key = ore_eval(ore, t->children[i]->children[0]);
      ore_value val = ore_eval(ore, t->children[i]->children[2]);
      khint_t k = kh_put(value, h, key.v.s->p, &r);
      kh_value(h, k) = val;
    }
    return ore_value_hash_from_khash(ore, h);
  }
  if (is_a(t, "regexp")) {
    ore_value v = ore_parse_str(ore, t->contents);
    v.t = ORE_TYPE_REGEXP;
	k = kh_put(ast, ore->ast, (khint64_t)(uintptr_t)t, &r);
	kh_value(ore->ast, k) = v;
    return v;
  }
  if (is_a(t, "item")) {
    ore_value v = ore_eval(ore, t->children[0]);
    for (i = 2; i < t->children_num; i += 3) {
      ore_value key = ore_eval(ore, t->children[i]);
      ore_value* r = ore_index_ref(ore, v, key, 0);
      v = r == NULL ? ore_value_nil() : *r;
    }
    return v;
  }
  if (is_a(t, "prop")) {
    ore_value v = ore_eval(ore, t->children[0]);
    ore_context* this = v.t == ORE_TYPE_OBJECT ? (ore_context*) v.v.o->e : NULL;
    for (i = 2; i < t->children_num; i += 2) {
      if (v.t != ORE_TYPE_OBJECT) {
        fprintf(stderr, "invalid operation for %s\n", ore_kind(v));
        ore->err = ORE_ERROR_EXCEPTION;
        return ore_value_nil();
      }
      v = ore_prop(this, t->children[i]->contents);
      if (v.t == ORE_TYPE_OBJECT) this = (ore_context*) v.v.o->e;
    }
    return v;
  }
  if (is_a(t, "ident")) {
    return ore_get(ore, t->contents);
  }
  if (is_a(t, "factor")) {
    return ore_eval(ore, t->children[1]);
  }
  if (is_a(t, "lexp") || is_a(t, "term")) {
    return ore_expr(ore, t);
  }
  if (is_a(t, "let_v")) {
    const char* op = t->children[1]->contents;
    ore_value rhs = ore_eval(ore, t->children[2]);
    ore_value lhs = *op != '=' ?
      ore_expr0(ore, ore_eval(ore, t->children[0]), op, rhs) : rhs;
    ore_set(ore, t->children[0]->contents, lhs);
    return lhs;
  }
  if (is_a(t, "let_a")) {
    ore_value lhs = ore_eval(ore, t->children[0]->children[0]);
    const char* op = t->children[1]->contents;
    ore_value* r = NULL;
    for (i = 2; i < t->children[0]->children_num - 1; i += 3) {
      ore_value key = ore_eval(ore, t->children[0]->children[i]);
      r = ore_index_ref(ore, lhs, key, 1);
      lhs = r == NULL ? ore_value_nil() : *r;
    }
    if (r == NULL) {
      return ore_value_nil();
    }
    ore_value rhs = ore_eval(ore, t->children[2]);
    if (*op != '=') lhs = ore_expr0(ore, lhs, op, rhs);
    ore_value_ref(rhs);
    *r = rhs;
    return rhs;
  }
  if (is_a(t, "let_p")) {
    ore_value lhs = ore_eval(ore, t->children[0]->children[0]);
    const char* op = t->children[1]->contents;
    ore_value* r = NULL;
    for (i = 2; i < t->children[0]->children_num; i += 2) {
      ore_value key = ore_value_str_from_ptr(ore, t->children[0]->children[i]->contents, -1);
      r = ore_index_ref(ore, lhs, key, 0);
      lhs = r == NULL ? ore_value_nil() : *r;
    }
    if (r == NULL) {
      return ore_value_nil();
    }
    ore_value rhs = ore_eval(ore, t->children[2]);
    if (*op != '=') lhs = ore_expr0(ore, lhs, op, rhs);
    ore_value_ref(rhs);
    *r = rhs;
    return rhs;
  }
  if (is_a(t, "var")) {
    ore_value v = ore_eval(ore, t->children[3]);
    ore_define(ore, t->children[1]->contents, v);
    return v;
  }
  if (is_a(t, "cmp")) {
    ore_value lhs = ore_eval(ore, t->children[0]);
    ore_value rhs = ore_eval(ore, t->children[2]);
    return ore_cmp(ore, lhs, t->children[1]->contents, rhs);
  }
  if (is_a(t, "func")) {
    ore_value v = { ORE_TYPE_FUNC };
    v.v.f.ore = ore;
    v.v.f.num_in = -1;
    v.v.f.max_in = -1;
    v.v.f.x.o = t;
    v.v.f.u = NULL;
    ore_define(ore, t->children[1]->contents, v);
    return v;
  }
  if (is_a(t, "lambda")) {
    ore_value v = { ORE_TYPE_FUNC };
    v.v.f.ore = ore;
    v.v.f.num_in = -1;
    v.v.f.max_in = -1;
    v.v.f.x.o = t;
    v.v.f.u = NULL;
    return v;
  }
  if (is_a(t, "class_ext")) {
    return ore_define_class(ore, t->children[1], t->children[5], t->children[3]->contents);
  }
  if (is_a(t, "class")) {
    return ore_define_class(ore, t->children[1], t->children[3], NULL);
  }
  if (is_a(t, "new")) {
    return ore_object_new(ore, t);
  }
  if (is_a(t, "call")) {
    return ore_call(ore, t);
  }
  if (is_a(t, "return")) {
    ore_value v = ore_eval(ore, t->children[1]);
    ore->err = ORE_ERROR_RETURN;
    ore_value_ref(v);
    return v;
  }
  if (is_a(t, "break")) {
    ore->err = ORE_ERROR_BREAK;
    return ore_value_nil();
  }
  if (is_a(t, "continue")) {
    ore->err = ORE_ERROR_CONTINUE;
    return ore_value_nil();
  }
  if (is_a(t, "if_stmt")) {
    if (ore_is_true(ore_eval(ore, t->children[2]))) {
      return ore_eval(ore, ore_find_statements(t));
    }
    return ore_value_nil();
  }
  if (is_a(t, "if")) {
    int i;
    for (i = 0; i < t->children_num; i++) {
      int r = 0;
      mpc_ast_t* f = t->children[i];
      if (is_a(f, "if_stmt")) {
        r = ore_is_true(ore_eval(ore, f->children[2]));
      } else if (is_a(f, "else_if")) {
        r = ore_is_true(ore_eval(ore, f->children[3]));
      } else {
        r = 1;
      }
      if (r)
        return ore_eval(ore, ore_find_statements(f));
    }
    return ore_value_nil();
  }
  if (is_a(t, "while")) {
    ore_context* env = ore_new(ore);
    while (ore_is_true(ore_eval(env, t->children[2]))) {
      ore_eval(env, ore_find_statements(t));
      if (env->err != ORE_ERROR_NONE) {
        if (env->err == ORE_ERROR_CONTINUE) {
          env->err = ORE_ERROR_NONE;
          continue;
        }
        break;
      }
    }
    if (env->err == ORE_ERROR_RETURN)
      ore->err = ORE_ERROR_RETURN;
    ore_destroy(env);
    return ore_value_nil();
  }
  if (is_a(t, "for_in")) {
    ore_value l = ore_eval(ore, t->children[4]);
    if (l.t != ORE_TYPE_ARRAY) {
      fprintf(stderr, "expected array for argument\n");
      ore->err = ORE_ERROR_EXCEPTION;
    }
    ore_array_t* a = (ore_array_t*) l.v.a->p;
    ore_array_iter_t *k;
    ore_context* env = ore_new(ore);
    for (k = kl_begin(a); k != kl_end(a); k = kl_next(k)) {
      ore_define(env, t->children[2]->contents, kl_val(k));
      ore_eval(env, ore_find_statements(t));
      if (env->err != ORE_ERROR_NONE) {
        if (env->err == ORE_ERROR_CONTINUE) {
          env->err = ORE_ERROR_NONE;
          continue;
        }
        break;
      }
    }
    if (env->err == ORE_ERROR_RETURN)
      ore->err = ORE_ERROR_RETURN;
    ore_destroy(env);
    return ore_value_nil();
  }
  if (is_a(t, "stmts") || is_a(t, "template") || t->tag[0] == '>') {
    ore_value v;
    for (i = 0; i < t->children_num; i++) {
      v = ore_eval(ore, t->children[i]);
      if (ore->err != ORE_ERROR_NONE)
        return v;
    }
    return ore_value_nil();
  }
  if (is_a(t, "stmt")) {
    return ore_eval(ore, t->children[0]);
  }
  if (is_a(t, "char") && !strcmp(t->contents, ";")) {
    return ore_value_nil();
  }
  fprintf(stderr, "unknown operation '%s'\n", t->contents);
  ore->err = ORE_ERROR_EXCEPTION;
  return ore_value_nil();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movq %rdi, %rbx
testq %rdx, %rdx
je 0xdd3f
movq %rdx, %r15
movq %rsi, %r14
movq 0x28(%rsi), %rax
movl (%rax), %edx
testl %edx, %edx
je 0xdd0e
leal -0x1(%rdx), %edi
movq %r15, %r8
shrq $0x21, %r8
movl %r15d, %ecx
shll $0xb, %ecx
xorl %ecx, %r8d
xorl %r15d, %r8d
andl %edi, %r8d
movq 0x10(%rax), %r9
movl $0x1, %r10d
movl %r8d, %esi
movl %esi, %ecx
shrl $0x4, %ecx
movl (%r9,%rcx,4), %r11d
leal (%rsi,%rsi), %ecx
andl $0x1e, %ecx
movl %r11d, %ebp
shrl %cl, %ebp
testb $0x2, %bpl
jne 0xdd02
testb $0x1, %bpl
jne 0xdcf3
movq 0x18(%rax), %r12
movl %esi, %r13d
cmpq %r15, (%r12,%r13,8)
je 0xdd02
addl %r10d, %esi
andl %edi, %esi
incl %r10d
cmpl %r8d, %esi
jne 0xdcc6
jmp 0xdd14
shrl %cl, %r11d
testb $0x3, %r11b
cmovnel %edx, %esi
jmp 0xdd10
xorl %esi, %esi
cmpl %edx, %esi
jne 0xdd53
movq (%r15), %r12
leaq 0x8205(%rip), %rsi      # 0x15f23
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xdd3f
leaq 0x6ed8(%rip), %rsi      # 0x14c0a
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xdd88
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movups %xmm0, (%rbx)
movq $0x0, 0x20(%rbx)
jmp 0xdd76
movq 0x20(%rax), %rax
movl %esi, %ecx
leaq (%rcx,%rcx,4), %rcx
movq 0x20(%rax,%rcx,8), %rdx
movq %rdx, 0x20(%rbx)
movups (%rax,%rcx,8), %xmm0
movups 0x10(%rax,%rcx,8), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x6db2(%rip), %rsi      # 0x14b41
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xddba
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
movq $0x0, 0x20(%rbx)
movl $0x1, %eax
movl %eax, (%rbx)
movl %eax, 0x8(%rbx)
jmp 0xdd76
leaq 0x6d85(%rip), %rsi      # 0x14b46
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xdde8
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
movq $0x0, 0x20(%rbx)
movl $0x1, (%rbx)
jmp 0xdd76
leaq 0x6d5d(%rip), %rsi      # 0x14b4c
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xdd3f
leaq 0x66e9(%rip), %rsi      # 0x144f0
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xde22
movq 0x8(%r15), %rsi
movq %rbx, %rdi
callq 0x106eb
jmp 0xde45
leaq 0x80d9(%rip), %rsi      # 0x15f02
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xde85
movq 0x8(%r15), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10904
movq 0x28(%r14), %rdi
leaq 0x84(%rsp), %rdx
movq %r15, %rsi
callq 0x1076d
movq 0x28(%r14), %rcx
movq 0x20(%rcx), %rcx
movl %eax, %eax
leaq (%rax,%rax,4), %rax
movq 0x20(%rbx), %rdx
movq %rdx, 0x20(%rcx,%rax,8)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rcx,%rax,8)
movups %xmm0, (%rcx,%rax,8)
jmp 0xdd76
leaq 0x6cc4(%rip), %rsi      # 0x14b50
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xdf18
callq 0xdb84
movq %rax, %r12
cmpl $0x3, 0x28(%r15)
jl 0xdef9
movl $0x1, %r13d
movq %r12, %rdi
callq 0xdbcc
movq %rax, %rbp
movq 0x30(%r15), %rax
movq (%rax,%r13,8), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rbp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rbp)
movups %xmm0, (%rbp)
addq $0x2, %r13
movslq 0x28(%r15), %rax
decq %rax
cmpq %rax, %r13
jl 0xdeae
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xdc1f
leaq 0x6c3c(%rip), %rsi      # 0x14b5b
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe00d
movl $0x1, %ebp
movl $0x1, %edi
movl $0x28, %esi
callq 0x2140
movq %rax, %r12
cmpl $0x3, 0x28(%r15)
jl 0xdfee
leaq 0x84(%rsp), %r13
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq 0x30(%rax), %rax
movq 0x10(%rax), %rdx
leaq 0x88(%rsp), %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x58(%rsp), %rax
movq (%rax), %rsi
movq %r12, %rdi
movq %r13, %rdx
callq 0xd1b4
movq 0x20(%r12), %rcx
movl %eax, %eax
leaq (%rax,%rax,4), %rax
movups 0x88(%rsp), %xmm0
movups 0x98(%rsp), %xmm1
movups %xmm0, (%rcx,%rax,8)
movups %xmm1, 0x10(%rcx,%rax,8)
movq 0xa8(%rsp), %rdx
movq %rdx, 0x20(%rcx,%rax,8)
addq $0x2, %rbp
movslq 0x28(%r15), %rax
decq %rax
cmpq %rax, %rbp
jl 0xdf5a
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x10a2f
leaq 0x6b4c(%rip), %rsi      # 0x14b60
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe03b
movq 0x8(%r15), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10904
movl $0x7, (%rbx)
jmp 0xde45
leaq 0x6b2f(%rip), %rsi      # 0x14b71
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe111
movq 0x30(%r15), %rax
movq (%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdc73
cmpl $0x3, 0x28(%r15)
jl 0xdd76
movl $0x2, %r13d
leaq 0x50(%rsp), %r12
movq 0x30(%r15), %rax
movq (%rax,%r13,8), %rdx
movq %r12, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x70(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
xorl %esi, %esi
callq 0x10a83
testq %rax, %rax
je 0xe0ec
movq 0x20(%rax), %rcx
movq %rcx, 0x20(%rbx)
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
jmp 0xe0fe
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movups %xmm0, (%rbx)
movq $0x0, 0x20(%rbx)
addq $0x3, %r13
cmpl %r13d, 0x28(%r15)
jg 0xe07b
jmp 0xdd76
leaq 0x6a5e(%rip), %rsi      # 0x14b76
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe150
movq 0x30(%r15), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdc73
movl (%r12), %edi
cmpl $0xd, %edi
jne 0xe188
movq 0x58(%rsp), %rax
movq 0x10(%rax), %r12
jmp 0xe18b
leaq 0x69df(%rip), %rsi      # 0x14b36
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe1f0
movq 0x8(%r15), %rdx
movq %rbx, %rdi
movq %r14, %rsi
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xce0e
xorl %r12d, %r12d
cmpl $0x3, 0x28(%r15)
jl 0xe1d8
movl $0x2, %ebp
leaq 0x50(%rsp), %r13
cmpl $0xd, %edi
jne 0xe26f
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq 0x8(%rax), %rdx
movq %r13, %rdi
movq %r12, %rsi
callq 0xccb4
movl 0x50(%rsp), %edi
cmpl $0xd, %edi
jne 0xe1ce
movq 0x58(%rsp), %rax
movq 0x10(%rax), %r12
addq $0x2, %rbp
cmpl %ebp, 0x28(%r15)
jg 0xe19c
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rbx)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
jmp 0xdd6f
leaq 0x6329(%rip), %rsi      # 0x14520
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe228
movq 0x30(%r15), %rax
movq 0x8(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xdc73
leaq 0x694c(%rip), %rsi      # 0x14b7b
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xe250
leaq 0x62d8(%rip), %rsi      # 0x1451b
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe2a9
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x110a3
movq 0xdd82(%rip), %rax      # 0x1bff8
movq (%rax), %r15
callq 0x11085
leaq 0x7d21(%rip), %rsi      # 0x15fa6
movq %r15, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2160
movl $0x1, 0x20(%r14)
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movups %xmm0, 0x10(%rbx)
jmp 0xdd49
leaq 0x68d6(%rip), %rsi      # 0x14b86
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe304
movq 0x30(%r15), %rax
movq 0x8(%rax), %rcx
movq 0x8(%rcx), %r12
movq 0x10(%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdc73
cmpb $0x3d, (%r12)
jne 0xe422
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rbx)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rbx)
movups %xmm0, (%rbx)
jmp 0xe484
leaq 0x6881(%rip), %rsi      # 0x14b8c
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe4b5
movq 0x30(%r15), %rax
movq (%rax), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x30(%r15), %rcx
movq (%rcx), %rax
cmpl $0x4, 0x28(%rax)
jl 0xdd3f
movq 0x8(%rcx), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, 0x78(%rsp)
movl $0x2, %r12d
leaq 0x88(%rsp), %rbp
movq 0x30(%rax), %rax
movq (%rax,%r12,8), %rdx
movq %rbp, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0xa8(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x88(%rsp), %xmm0
movups 0x98(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
movl $0x1, %esi
callq 0x10a83
movq %rax, %r13
testq %rax, %rax
je 0xe3ee
movq 0x20(%r13), %rax
movq %rax, 0x70(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movaps %xmm1, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
jmp 0xe404
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x70(%rsp)
addq $0x3, %r12
movq 0x30(%r15), %rcx
movq (%rcx), %rax
movl 0x28(%rax), %edx
decl %edx
cmpl %r12d, %edx
jg 0xe363
jmp 0xe5d0
movq 0x30(%r15), %rax
movq (%rax), %rdx
leaq 0x150(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x70(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x1118b
movq 0x30(%r15), %rax
movq (%rax), %rax
movq 0x8(%rax), %rsi
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
callq 0xcfbe
jmp 0xdd76
leaq 0x66d6(%rip), %rsi      # 0x14b92
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe67a
movq 0x30(%r15), %rax
movq (%rax), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x30(%r15), %rcx
movq (%rcx), %rax
cmpl $0x3, 0x28(%rax)
jl 0xdd3f
movq 0x8(%rcx), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, 0x78(%rsp)
movl $0x2, %r12d
leaq 0x88(%rsp), %rbp
movq 0x30(%rax), %rax
movq (%rax,%r12,8), %rax
movq 0x8(%rax), %rdx
movq %rbp, %rdi
movq %r14, %rsi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x10344
movq 0xa8(%rsp), %rax
movq %rax, 0x48(%rsp)
movups 0x88(%rsp), %xmm0
movups 0x98(%rsp), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x50(%rsp), %xmm0
movups 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
xorl %esi, %esi
callq 0x10a83
movq %rax, %r13
testq %rax, %rax
je 0xe5a5
movq 0x20(%r13), %rax
movq %rax, 0x70(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movaps %xmm1, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
jmp 0xe5bb
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x70(%rsp)
addq $0x2, %r12
movq 0x30(%r15), %rcx
movq (%rcx), %rax
cmpl %r12d, 0x28(%rax)
jg 0xe514
testq %r13, %r13
je 0xdd3f
movq 0x10(%rcx), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x78(%rsp), %rax
cmpb $0x3d, (%rax)
je 0xe63e
movq 0x20(%rbx), %rax
movq %rax, 0x48(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
movaps 0x50(%rsp), %xmm0
movaps 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x88(%rsp), %rdi
movq %r14, %rsi
movq 0x78(%rsp), %rdx
callq 0x1118b
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xcab9
movq 0x20(%rbx), %rax
movq %rax, 0x20(%r13)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
jmp 0xdd76
leaq 0x6548(%rip), %rsi      # 0x14bc9
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe6d3
movq 0x30(%r15), %rax
movq 0x18(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x30(%r15), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r14, %rdi
callq 0xd3c9
jmp 0xdd76
leaq 0x648d(%rip), %rsi      # 0x14b67
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe774
movq 0x30(%r15), %rax
movq (%rax), %rdx
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
leaq 0x88(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x30(%r15), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
movq 0x20(%r13), %rax
movq %rax, 0x48(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x38(%rsp)
movups %xmm0, 0x28(%rsp)
movq 0x20(%r12), %rax
movq %rax, 0x20(%rsp)
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1148c
jmp 0xdd76
leaq 0x6459(%rip), %rsi      # 0x14bd4
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe7ac
xorl %eax, %eax
movq %rax, (%rbx)
movl $0x8, (%rbx)
movq %r14, 0x8(%rbx)
movq $-0x1, 0x10(%rbx)
movq %r15, 0x18(%rbx)
movq %rax, 0x20(%rbx)
jmp 0xe6a1
leaq 0x641a(%rip), %rsi      # 0x14bcd
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe7e4
xorl %eax, %eax
movq %rax, (%rbx)
movl $0x8, (%rbx)
movq %r14, 0x8(%rbx)
movq $-0x1, 0x10(%rbx)
movq %r15, 0x18(%rbx)
movq %rax, 0x20(%rbx)
jmp 0xdd76
leaq 0x63fd(%rip), %rsi      # 0x14be8
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe814
movq 0x30(%r15), %rax
movq 0x28(%rax), %rcx
movq 0x8(%rax), %rdx
movq 0x18(%rax), %rax
movq 0x8(%rax), %r8
movq %rbx, %rdi
movq %r14, %rsi
jmp 0xe83d
leaq 0x63c7(%rip), %rsi      # 0x14be2
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe853
movq 0x30(%r15), %rax
movq 0x8(%rax), %rdx
movq 0x18(%rax), %rcx
movq %rbx, %rdi
movq %r14, %rsi
xorl %r8d, %r8d
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x11901
leaq 0x6398(%rip), %rsi      # 0x14bf2
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe886
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x119e1
leaq 0x6378(%rip), %rsi      # 0x14c05
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe8b9
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x11baf
leaq 0x5d55(%rip), %rsi      # 0x14615
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe90b
movq 0x30(%r15), %rax
movq 0x8(%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xdc73
movl $0x2, 0x20(%r14)
movq 0x20(%rbx), %rax
movq %rax, 0x20(%rsp)
movups (%rbx), %xmm0
movups 0x10(%rbx), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xcab9
jmp 0xdd76
leaq 0x62a8(%rip), %rsi      # 0x14bba
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe92c
movl $0x3, 0x20(%r14)
jmp 0xdd3f
leaq 0x628d(%rip), %rsi      # 0x14bc0
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe94d
movl $0x4, 0x20(%r14)
jmp 0xdd3f
leaq 0x6244(%rip), %rsi      # 0x14b98
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xe9bd
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
leaq 0x128(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x20(%r12), %rax
movq %rax, 0x20(%rsp)
movups (%r12), %xmm0
movups 0x10(%r12), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12080
testl %eax, %eax
je 0xdd3f
movq %r15, %rdi
callq 0x12282
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
jmp 0xe212
leaq 0x61e1(%rip), %rsi      # 0x14ba5
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xea8e
cmpl $0x0, 0x28(%r15)
jle 0xdd3f
xorl %ebp, %ebp
movq 0x30(%r15), %rax
movq (%rax,%rbp,8), %rax
movq %rax, 0x78(%rsp)
movq (%rax), %r12
movq %r12, %rdi
leaq 0x619c(%rip), %rsi      # 0x14b98
callq 0x2290
movl $0x10, %ecx
leaq 0x100(%rsp), %r13
testq %rax, %rax
jne 0xea38
movq %r12, %rdi
leaq 0x6183(%rip), %rsi      # 0x14ba0
callq 0x2290
movl $0x18, %ecx
leaq 0xd8(%rsp), %r13
testq %rax, %rax
je 0xeb7e
movq 0x78(%rsp), %rax
movq 0x30(%rax), %rax
movq (%rax,%rcx), %rdx
movq %r13, %rdi
movq %r14, %rsi
callq 0xdc73
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12080
testl %eax, %eax
jne 0xeb7e
incq %rbp
movslq 0x28(%r15), %rax
cmpq %rax, %rbp
jl 0xe9e2
jmp 0xdd3f
leaq 0x6118(%rip), %rsi      # 0x14bad
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xeb88
movq %r14, %rdi
callq 0xd661
movq %rax, %r12
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
leaq 0xb0(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xdc73
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12080
testl %eax, %eax
je 0xeb6d
leaq 0x50(%rsp), %r13
leaq 0xb0(%rsp), %rbp
movq %r15, %rdi
callq 0x12282
movq %r13, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdc73
movl 0x20(%r12), %eax
testl %eax, %eax
je 0xeb2b
cmpl $0x4, %eax
jne 0xeb6d
movl $0x0, 0x20(%r12)
movq 0x30(%r15), %rax
movq 0x10(%rax), %rdx
movq %rbp, %rdi
movq %r12, %rsi
callq 0xdc73
movq 0xd0(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0xb0(%rsp), %xmm0
movups 0xc0(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0x12080
testl %eax, %eax
jne 0xeafe
cmpl $0x2, 0x20(%r12)
je 0xecd4
jmp 0xecdc
movq 0x78(%rsp), %rdi
jmp 0xe9aa
leaq 0x6024(%rip), %rsi      # 0x14bb3
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xec59
movq 0x30(%r15), %rax
movq 0x20(%rax), %rdx
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xdc73
cmpl $0x5, (%r12)
jne 0xece9
movq 0x58(%rsp), %rax
movq (%rax), %rbp
movq %r14, %rdi
callq 0xd661
movq %rax, %r12
movq (%rbp), %r13
cmpq 0x8(%rbp), %r13
je 0xecca
movq 0x30(%r15), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq 0x20(%r13), %rax
movq %rax, 0x20(%rsp)
movups (%r13), %xmm0
movups 0x10(%r13), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
movq %r12, %rdi
callq 0xd3c9
movq %r15, %rdi
callq 0x12282
leaq 0x88(%rsp), %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0xdc73
movl 0x20(%r12), %eax
testl %eax, %eax
je 0xec4a
cmpl $0x4, %eax
jne 0xeccf
movl $0x0, 0x20(%r12)
movq 0x28(%r13), %r13
cmpq 0x8(%rbp), %r13
jne 0xebe4
jmp 0xecdc
leaq 0x5fb2(%rip), %rsi      # 0x14c12
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xec88
leaq 0x5f65(%rip), %rsi      # 0x14bd9
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
jne 0xec88
cmpb $0x3e, (%r12)
jne 0xecf6
cmpl $0x0, 0x28(%r15)
jle 0xdd3f
xorl %r13d, %r13d
leaq 0x50(%rsp), %r12
movq 0x30(%r15), %rax
movq (%rax,%r13,8), %rdx
movq %r12, %rdi
movq %r14, %rsi
callq 0xdc73
cmpl $0x0, 0x20(%r14)
jne 0xe1d8
incq %r13
movslq 0x28(%r15), %rax
cmpq %rax, %r13
jl 0xec9b
jmp 0xdd3f
movl 0x20(%r12), %eax
cmpl $0x2, %eax
jne 0xecdc
movl $0x2, 0x20(%r14)
movq %r12, %rdi
callq 0xed53
jmp 0xdd3f
movq %r14, %rdi
callq 0x23d6
jmp 0xebc3
leaq 0x5e9e(%rip), %rsi      # 0x14b9b
movq %r12, %rdi
callq 0x2290
testq %rax, %rax
je 0xed16
movq 0x30(%r15), %rax
movq (%rax), %rdx
jmp 0xe20c
leaq 0x57eb(%rip), %rsi      # 0x14508
movq %r12, %rdi
callq 0x2290
movq 0x8(%r15), %rdx
testq %rax, %rax
je 0xed3d
cmpb $0x3b, (%rdx)
jne 0xed3d
cmpb $0x0, 0x1(%rdx)
je 0xdd3f
movq 0xd2b4(%rip), %rax      # 0x1bff8
movq (%rax), %rdi
leaq 0x728f(%rip), %rsi      # 0x15fdd
jmp 0xe28b