// File: /workspace/github_cpp_makefile_star2_O1/jpbalarini[P]otsus/./framework/CInspector.cpp
// Function: CInspector::process_input(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, CFramework*)
int CInspector::process_input(string input, CFramework *fw) {
  vector<string> tokens;

  int num_tokens = read_tokens(&tokens, input);
  if (num_tokens == 0) return INSPECTOR_OK; // just pressed <ENTER>

  string command = tokens[0];
  if (!check_command_arguments(command, num_tokens)) {
    return INSPECTOR_ERR_BAD_ARGUMENTS;
  }

  if (command == "l" || command == "list") {
    fw->print_matrix_list();
    return INSPECTOR_OK;
  }

  if (command == "u" || command == "use") {
    if (tokens.size() != 2) {
      return INSPECTOR_ERR_NO_MATRIX_ARGUMENT;
    }
    string name = tokens[1];

    MatrixInfo *matrix = fw->find_matrix_by_list_pos(atoi(name.c_str()));
    //MatrixInfo *matrix = fw->find_matrix(name);
    if (matrix == NULL) {
      return INSPECTOR_ERR_MATRIX_DOES_NOT_EXIST;
    }
    //
    G_using_matrix = matrix;
    describe_matrix(matrix);

    CInspector::prod_dims = new int[matrix->num_dims];
    acc_product_of_dims(matrix, CInspector::prod_dims);
  }

  if (command == "bt") {
    printf("Backtrace:\n");
    fw->print_backtrace(stdout);
    return INSPECTOR_OK;
  }


  if (command == "desc") {
    describe_matrix(G_using_matrix);
    return INSPECTOR_OK;
  }

  if (command == "g" || command == "get") {
    if (G_using_matrix == NULL) {
      return INSPECTOR_ERR_NO_MATRIX_SELECTED_YET;
    }

    // Check number of coordinates
    int num_coords = tokens.size() - 1;
    if (num_coords != G_using_matrix->num_dims) {
      return INSPECTOR_ERR_COORDINATES_ARGUMENT;
    }

    int coords[num_coords];
    for (int i = 0; i < num_coords; i++) {
      int coord = atoi(tokens[i+1].c_str());
      if (coord >= G_using_matrix->N[i]) {
        return INSPECTOR_ERR_OUT_OF_BOUNDS;
      }
      coords[i] = coord;
    }
    //
    int pos = get_pos_by_coordinates(coords, G_using_matrix);

    char coords_buffer[1024];
    list_of_ints(coords_buffer, ", ", coords, num_coords);


    printf("Matrix_%d[%s] == %f (pos %d).\n", G_using_matrix->id, coords_buffer, G_using_matrix->data[pos], pos);
    return INSPECTOR_OK;
  }

  if (command == "s" || command == "set") {
    if (G_using_matrix == NULL) {
      return INSPECTOR_ERR_NO_MATRIX_SELECTED_YET;
    }

    // Check number of coordinates
    int num_coords = tokens.size() - 2;
    if (num_coords != G_using_matrix->num_dims) {
      return INSPECTOR_ERR_COORDINATES_ARGUMENT;
    }

    int coords[num_coords];
    for (int i = 0; i < num_coords; i++) {
      int coord = atoi(tokens[i+1].c_str());
      if (coord >= G_using_matrix->N[i]) {
        return INSPECTOR_ERR_OUT_OF_BOUNDS;
      }
      coords[i] = coord;
    }
    //
    int pos = get_pos_by_coordinates(coords, G_using_matrix);
    float new_value = atof(tokens[num_coords+1].c_str());

    char coords_buffer[1024];
    list_of_ints(coords_buffer, ", ", coords, num_coords);

    printf("Before: M_%d[%s] == %f (pos %d).\n", G_using_matrix->id, coords_buffer, G_using_matrix->data[pos], pos);
    G_using_matrix->data[pos] = new_value;
    printf("After: M_%d[%s] == %f (pos %d).\n", G_using_matrix->id, coords_buffer, G_using_matrix->data[pos], pos);
    return INSPECTOR_OK;
  }

  if (command == "mem") {
    rusage usage;
    int status = getrusage(RUSAGE_SELF, &usage);
    if (status == 0) {
      printf("maximum resident set size: %lu\n", usage.ru_maxrss);
      printf("integral shared memory size: %lu\n", usage.ru_ixrss);
      printf("integral unshared data size: %lu\n", usage.ru_idrss);
      printf("integral unshared stack size: %lu\n", usage.ru_isrss);
      printf("page reclaims (soft page faults): %lu\n", usage.ru_minflt);
      printf("page faults (hard page faults): %lu\n", usage.ru_majflt);
      printf("swaps: %lu\n", usage.ru_nswap);
      printf("block input operations: %lu\n", usage.ru_inblock);
      printf("block output operations: %lu\n", usage.ru_oublock);
      printf("IPC messages sent: %lu\n", usage.ru_msgsnd);
      printf("IPC messages received: %lu\n", usage.ru_msgrcv);
      printf("signals received: %lu\n", usage.ru_nsignals);
      printf("voluntary context switches: %lu\n", usage.ru_nvcsw);
      printf("involuntary context switches: %lu\n", usage.ru_nivcsw);
    }
    return INSPECTOR_OK;
  }

  if (command == "save") {
    if (G_using_matrix == NULL)
      return INSPECTOR_ERR_NO_MATRIX_SELECTED_YET;
    if (tokens.size() != 2)
      return INSPECTOR_ERR_NO_FILENAME;
    //
    char *filename = (char*)tokens[1].c_str();
    int id = G_using_matrix->id;
    fw->save_matrix(G_using_matrix, filename);
    G_using_matrix = fw->find_matrix(id);
    return INSPECTOR_OK;
  }

  if (command == "load") {
    if (G_using_matrix == NULL)
      return INSPECTOR_ERR_NO_MATRIX_SELECTED_YET;
    if (tokens.size() != 2)
      return INSPECTOR_ERR_NO_FILENAME;
    //
    char *filename = (char*)tokens[1].c_str();
    int status = fw->load_matrix(G_using_matrix, filename);
    switch (status) {
      case  0: return INSPECTOR_OK; break;
      case -1: return INSPECTOR_ERR_CAN_NOT_OPEN_FILE; break;
      case -2: return INSPECTOR_ERR_INCOMPATIBLE_DIMENSIONS; break;
      case -3: return INSPECTOR_ERR_READ_ERROR; break;
    }
    return INSPECTOR_OK;
  }


  if (command == "h" || command == "help") {
    printf("Framework CLI inpector. Help not available yet, sorry.\n");
    return INSPECTOR_OK;
  }

  return INSPECTOR_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4a8, %rsp            # imm = 0x4A8
movq %rsi, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, -0x40(%rbp)
movq $0x0, -0x30(%rbp)
leaq -0xa0(%rbp), %r15
movq %r15, -0x10(%r15)
movq (%rdi), %rsi
movq 0x8(%rdi), %rdx
addq %rsi, %rdx
leaq -0xb0(%rbp), %rdi
callq 0x6fd2
leaq -0x40(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x5d0c
movl %eax, %r14d
movq -0xb0(%rbp), %rdi
cmpq %r15, %rdi
je 0x601d
movq -0xa0(%rbp), %rsi
incq %rsi
callq 0x3260
testl %r14d, %r14d
je 0x62e7
movq -0x40(%rbp), %rax
leaq -0x50(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x60(%rbp), %rdi
callq 0x6fd2
leaq -0xc0(%rbp), %r13
movq %r13, -0x10(%r13)
movq -0x60(%rbp), %rsi
movq -0x58(%rbp), %rdx
addq %rsi, %rdx
leaq -0xd0(%rbp), %rdi
callq 0x6fd2
leaq -0xd0(%rbp), %r12
movq %r12, %rdi
movl %r14d, %esi
callq 0x5f0a
movl %eax, %r15d
movq (%r12), %rdi
cmpq %r13, %rdi
je 0x6094
movq -0xc0(%rbp), %rsi
incq %rsi
callq 0x3260
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testb %r15b, %r15b
je 0x62f7
leaq 0x25e4(%rip), %rsi      # 0x868e
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x62ec
leaq 0x25c3(%rip), %rsi      # 0x8685
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x62ec
leaq 0x25b6(%rip), %rsi      # 0x8690
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x60ff
leaq 0x259c(%rip), %rsi      # 0x868a
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
jne 0x61d9
movq -0x40(%rbp), %rax
movq -0x38(%rbp), %rcx
subq %rax, %rcx
movl $0xfffffffe, %r14d      # imm = 0xFFFFFFFE
cmpq $0x40, %rcx
jne 0x62f7
leaq -0x4c0(%rbp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
addq %rsi, %rdx
leaq -0x4d0(%rbp), %rdi
callq 0x6fd2
movq -0x4d0(%rbp), %rdi
callq 0x3410
movq %rbx, %rdi
movl %eax, %esi
callq 0x4236
movq %rax, %r14
testq %rax, %rax
je 0x6422
movq %r14, 0x617b(%rip)      # 0xc2e0
movq %r14, %rdi
callq 0x5eac
movslq 0xc(%r14), %rax
leaq (,%rax,4), %rcx
testq %rax, %rax
movq $-0x1, %rdi
cmovnsq %rcx, %rdi
callq 0x3030
movq %rax, 0x6155(%rip)      # 0xc2e8
movl $0x1, (%rax)
cmpl $0x2, 0xc(%r14)
jl 0x61be
movq 0x10(%r14), %rcx
movl (%rax), %edx
movl $0x1, %esi
imull (%rcx,%rsi,4), %edx
movl %edx, (%rax,%rsi,4)
incq %rsi
movslq 0xc(%r14), %rdi
cmpq %rdi, %rsi
jl 0x61ab
movq -0x4d0(%rbp), %rdi
cmpq %r15, %rdi
je 0x61d9
movq -0x4c0(%rbp), %rsi
incq %rsi
callq 0x3260
leaq 0x24b2(%rip), %rsi      # 0x8692
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x632b
leaq 0x249d(%rip), %rsi      # 0x8695
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x6411
leaq 0x248a(%rip), %rsi      # 0x869a
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x634b
leaq 0x2474(%rip), %rsi      # 0x869c
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x634b
leaq 0x1f80(%rip), %rsi      # 0x81c0
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x6448
leaq 0x246a(%rip), %rsi      # 0x86c2
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x6448
leaq 0x2499(%rip), %rsi      # 0x8709
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x65a1
leaq 0x260d(%rip), %rsi      # 0x8895
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x67e1
leaq 0x25fa(%rip), %rsi      # 0x889a
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x6833
leaq 0x25e7(%rip), %rsi      # 0x889f
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
je 0x62d9
leaq 0x25d5(%rip), %rsi      # 0x88a1
leaq -0x60(%rbp), %rdi
callq 0x3100
testl %eax, %eax
jne 0x62f4
leaq 0x2809(%rip), %rdi      # 0x8ae9
callq 0x3400
jmp 0x62f4
xorl %r14d, %r14d
jmp 0x6310
movq %rbx, %rdi
callq 0x3ece
xorl %r14d, %r14d
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0x6310
movq -0x50(%rbp), %rsi
incq %rsi
callq 0x3260
leaq -0x40(%rbp), %rdi
callq 0x6cca
movl %r14d, %eax
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x27ee(%rip), %rdi      # 0x8b20
callq 0x3400
movq 0x5c42(%rip), %rax      # 0xbf80
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x444c
jmp 0x62f4
movq 0x5f8e(%rip), %rax      # 0xc2e0
testq %rax, %rax
je 0x6882
movq -0x38(%rbp), %rdx
subq -0x40(%rbp), %rdx
shrq $0x5, %rdx
decl %edx
movl $0xfffffffb, %r14d      # imm = 0xFFFFFFFB
cmpl 0xc(%rax), %edx
jne 0x62f7
movq %rsp, -0x88(%rbp)
movl %edx, %eax
movq %rsp, %rcx
leaq 0xf(,%rax,4), %rax
andq $-0x10, %rax
subq %rax, %rcx
movq %rcx, -0x68(%rbp)
movq %rcx, %rsp
movq -0x40(%rbp), %r12
movq 0x5f3f(%rip), %rax      # 0xc2e0
movq %rax, -0x70(%rbp)
movslq %edx, %rax
movq %rax, -0x80(%rbp)
xorl %ecx, %ecx
testl %edx, %edx
movl $0x0, %r13d
movq %rdx, -0x78(%rbp)
cmovgl %edx, %r13d
addq $0x20, %r12
movl $0xfffffffd, %ebx       # imm = 0xFFFFFFFD
movq %rcx, %r15
cmpq %rcx, %r13
je 0x651d
movq (%r12), %rdi
callq 0x3410
movq -0x70(%rbp), %rcx
movq 0x10(%rcx), %rcx
movl (%rcx,%r15,4), %edx
movl $0xfffffffa, %r14d      # imm = 0xFFFFFFFA
cmpl %edx, %eax
jge 0x63fd
movq -0x68(%rbp), %rcx
movl %eax, (%rcx,%r15,4)
movl %ebx, %r14d
addq $0x20, %r12
leaq 0x1(%r15), %rcx
movl %r14d, %ebx
cmpl %edx, %eax
jl 0x63c7
jmp 0x6520
movq 0x5ec8(%rip), %rdi      # 0xc2e0
callq 0x5eac
jmp 0x62f4
movq -0x4d0(%rbp), %rdi
cmpq %r15, %rdi
je 0x643d
movq -0x4c0(%rbp), %rsi
incq %rsi
callq 0x3260
movl $0xfffffffd, %r14d      # imm = 0xFFFFFFFD
jmp 0x62f7
movq 0x5e91(%rip), %rax      # 0xc2e0
testq %rax, %rax
je 0x6882
movq -0x38(%rbp), %rcx
subq -0x40(%rbp), %rcx
movq %rcx, %rdx
shrq $0x5, %rdx
addl $-0x2, %edx
movl $0xfffffffb, %r14d      # imm = 0xFFFFFFFB
cmpl 0xc(%rax), %edx
jne 0x62f7
movq %rcx, -0x90(%rbp)
movq %rsp, -0x88(%rbp)
movl %edx, %eax
movq %rsp, %rcx
leaq 0xf(,%rax,4), %rax
andq $-0x10, %rax
subq %rax, %rcx
movq %rcx, -0x68(%rbp)
movq %rcx, %rsp
movq -0x40(%rbp), %r12
movq 0x5e33(%rip), %rax      # 0xc2e0
movq %rax, -0x70(%rbp)
movslq %edx, %rax
movq %rax, -0x80(%rbp)
xorl %ecx, %ecx
testl %edx, %edx
movl $0x0, %r13d
movq %rdx, -0x78(%rbp)
cmovgl %edx, %r13d
addq $0x20, %r12
movl $0xfffffffd, %ebx       # imm = 0xFFFFFFFD
movq %rcx, %r15
cmpq %rcx, %r13
je 0x66e5
movq (%r12), %rdi
callq 0x3410
movq -0x70(%rbp), %rcx
movq 0x10(%rcx), %rcx
movl (%rcx,%r15,4), %edx
movl $0xfffffffa, %r14d      # imm = 0xFFFFFFFA
cmpl %edx, %eax
jge 0x6509
movq -0x68(%rbp), %rcx
movl %eax, (%rcx,%r15,4)
movl %ebx, %r14d
addq $0x20, %r12
leaq 0x1(%r15), %rcx
movl %r14d, %ebx
cmpl %edx, %eax
jl 0x64d3
jmp 0x66e8
movl %ebx, %r14d
cmpq -0x80(%rbp), %r15
jl 0x67d5
movq 0x5daf(%rip), %rax      # 0xc2e0
movslq 0xc(%rax), %rax
xorl %r14d, %r14d
movl $0x0, %ebx
testq %rax, %rax
movq -0x68(%rbp), %rdx
jle 0x6562
xorl %ecx, %ecx
movq 0x5d99(%rip), %rdi      # 0xc2e8
xorl %ebx, %ebx
movl (%rdx,%rcx,4), %esi
imull (%rdi,%rcx,4), %esi
addl %esi, %ebx
incq %rcx
cmpq %rcx, %rax
jne 0x6551
leaq 0x2137(%rip), %rsi      # 0x86a0
leaq -0x4d0(%rbp), %r12
movq %r12, %rdi
movq -0x78(%rbp), %rcx
callq 0x5e2e
movq 0x5d5d(%rip), %rax      # 0xc2e0
movl 0x8(%rax), %esi
movq 0x18(%rax), %rax
movslq %ebx, %rcx
cvtss2sd (%rax,%rcx,4), %xmm0
leaq 0x210a(%rip), %rdi      # 0x86a3
movq %r12, %rdx
jmp 0x67ce
xorl %r14d, %r14d
leaq -0x4d0(%rbp), %rsi
xorl %edi, %edi
callq 0x3180
testl %eax, %eax
jne 0x62f7
movq -0x4b0(%rbp), %rsi
leaq 0x2145(%rip), %rdi      # 0x870d
xorl %eax, %eax
callq 0x3070
movq -0x4a8(%rbp), %rsi
leaq 0x2150(%rip), %rdi      # 0x872d
xorl %eax, %eax
callq 0x3070
movq -0x4a0(%rbp), %rsi
leaq 0x215d(%rip), %rdi      # 0x874f
xorl %eax, %eax
callq 0x3070
movq -0x498(%rbp), %rsi
leaq 0x216a(%rip), %rdi      # 0x8771
xorl %eax, %eax
callq 0x3070
movq -0x490(%rbp), %rsi
leaq 0x2178(%rip), %rdi      # 0x8794
xorl %eax, %eax
callq 0x3070
movq -0x488(%rbp), %rsi
leaq 0x218a(%rip), %rdi      # 0x87bb
xorl %eax, %eax
callq 0x3070
movq -0x480(%rbp), %rsi
leaq 0x219a(%rip), %rdi      # 0x87e0
xorl %eax, %eax
callq 0x3070
movq -0x478(%rbp), %rsi
leaq 0x2191(%rip), %rdi      # 0x87ec
xorl %eax, %eax
callq 0x3070
movq -0x470(%rbp), %rsi
leaq 0x2199(%rip), %rdi      # 0x8809
xorl %eax, %eax
callq 0x3070
movq -0x468(%rbp), %rsi
leaq 0x21a2(%rip), %rdi      # 0x8827
xorl %eax, %eax
callq 0x3070
movq -0x460(%rbp), %rsi
leaq 0x21a5(%rip), %rdi      # 0x883f
xorl %eax, %eax
callq 0x3070
movq -0x458(%rbp), %rsi
leaq 0x21ac(%rip), %rdi      # 0x885b
xorl %eax, %eax
callq 0x3070
movq -0x450(%rbp), %rsi
leaq 0x21b0(%rip), %rdi      # 0x8874
xorl %eax, %eax
callq 0x3070
movq -0x448(%rbp), %rsi
leaq 0x2199(%rip), %rdi      # 0x8872
xorl %eax, %eax
callq 0x3070
jmp 0x62f7
movl %ebx, %r14d
cmpq -0x80(%rbp), %r15
jl 0x67d5
movq 0x5be7(%rip), %rax      # 0xc2e0
movslq 0xc(%rax), %rax
xorl %r14d, %r14d
movl $0x0, %ebx
testq %rax, %rax
movq -0x68(%rbp), %r15
jle 0x672b
xorl %ecx, %ecx
movq 0x5bd1(%rip), %rdx      # 0xc2e8
xorl %ebx, %ebx
movl (%r15,%rcx,4), %esi
imull (%rdx,%rcx,4), %esi
addl %esi, %ebx
incq %rcx
cmpq %rcx, %rax
jne 0x6719
movq -0x90(%rbp), %rcx
shlq $0x1b, %rcx
movabsq $-0x100000000, %rax     # imm = 0xFFFFFFFF00000000
addq %rcx, %rax
movq -0x40(%rbp), %rcx
sarq $0x1b, %rax
movq (%rcx,%rax), %rdi
callq 0x3330
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x70(%rbp)
leaq 0x1f3c(%rip), %rsi      # 0x86a0
leaq -0x4d0(%rbp), %r12
movq %r12, %rdi
movq %r15, %rdx
movq -0x78(%rbp), %rcx
callq 0x5e2e
movq 0x5b5f(%rip), %rax      # 0xc2e0
movl 0x8(%rax), %esi
movq 0x18(%rax), %rax
movslq %ebx, %rbx
xorps %xmm0, %xmm0
cvtss2sd (%rax,%rbx,4), %xmm0
leaq 0x1f2c(%rip), %rdi      # 0x86c6
movq %r12, %rdx
movl %ebx, %ecx
movb $0x1, %al
callq 0x3070
movq 0x5b33(%rip), %rax      # 0xc2e0
movq 0x18(%rax), %rcx
movss -0x70(%rbp), %xmm0
movss %xmm0, (%rcx,%rbx,4)
movl 0x8(%rax), %esi
cvtss2sd %xmm0, %xmm0
leaq 0x1f1f(%rip), %rdi      # 0x86e8
movq %r12, %rdx
movl %ebx, %ecx
movb $0x1, %al
callq 0x3070
movq -0x88(%rbp), %rsp
jmp 0x62f7
movq 0x5af8(%rip), %rsi      # 0xc2e0
testq %rsi, %rsi
je 0x6882
movq -0x40(%rbp), %rax
movq -0x38(%rbp), %rcx
subq %rax, %rcx
movl $0xfffffff9, %r14d      # imm = 0xFFFFFFF9
cmpq $0x40, %rcx
jne 0x62f7
movq 0x20(%rax), %rdx
movl 0x8(%rsi), %r14d
movq %rbx, %rdi
callq 0x4288
movq %rbx, %rdi
movl %r14d, %esi
callq 0x4186
movq %rax, 0x5ab2(%rip)      # 0xc2e0
jmp 0x62f4
movq 0x5aa6(%rip), %rsi      # 0xc2e0
testq %rsi, %rsi
je 0x6882
movq -0x40(%rbp), %rax
movq -0x38(%rbp), %rcx
subq %rax, %rcx
movl $0xfffffff9, %r14d      # imm = 0xFFFFFFF9
cmpq $0x40, %rcx
jne 0x62f7
movq 0x20(%rax), %rdx
movq %rbx, %rdi
callq 0x4352
cmpl $-0x4, %eax
jbe 0x62f4
cltq
leaq 0x22cc(%rip), %rcx      # 0x8b44
movl 0xc(%rcx,%rax,4), %r14d
jmp 0x62f7
movl $0xfffffffc, %r14d      # imm = 0xFFFFFFFC
jmp 0x62f7
jmp 0x68b5
jmp 0x68b5
jmp 0x68b5
movq %rax, %rbx
movq -0x4d0(%rbp), %rdi
cmpq %r15, %rdi
je 0x68b8
movq -0x4c0(%rbp), %rsi
incq %rsi
callq 0x3260
jmp 0x68b8
jmp 0x68eb
movq %rax, %rbx
movq -0x60(%rbp), %rdi
leaq -0x50(%rbp), %rax
cmpq %rax, %rdi
je 0x68ee
movq -0x50(%rbp), %rsi
jmp 0x68e1
movq %rax, %rbx
movq -0xb0(%rbp), %rdi
cmpq %r15, %rdi
je 0x68ee
movq -0xa0(%rbp), %rsi
incq %rsi
callq 0x3260
jmp 0x68ee
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x6cca
movq %rbx, %rdi
callq 0x34b0
nop