// File: jswaff[P]prophet3/src/book.cpp
// Function: load_zkeys_callback(void*, int, char**, char**)
static int load_zkeys_callback(void *data, int argc, char **argv, char **azColName){
    int* num_keys = (int*)data;

    if (argc==1 && argv[0]) {
        int64 key = strtoll(argv[0],(char **)NULL, 10);
        int32 sq_ind = (*num_keys) % 64;
        if (*num_keys < 64) {
            bk_pieces[PAWN][WHITE][sq_ind] = key;
        } else if (*num_keys < 128) {
            bk_pieces[ROOK][WHITE][sq_ind] = key;
        } else if (*num_keys < 192) {
            bk_pieces[KNIGHT][WHITE][sq_ind] = key;
        } else if (*num_keys < 256) {
            bk_pieces[BISHOP][WHITE][sq_ind] = key;
        } else if (*num_keys < 320) {
            bk_pieces[QUEEN][WHITE][sq_ind] = key;
        } else if (*num_keys < 384) {
            bk_pieces[KING][WHITE][sq_ind] = key;
        } else if (*num_keys < 448) {
            bk_pieces[PAWN][BLACK][sq_ind] = key;
        } else if (*num_keys < 512) {
            bk_pieces[ROOK][BLACK][sq_ind] = key;
        } else if (*num_keys < 576) {
            bk_pieces[KNIGHT][BLACK][sq_ind] = key;
        } else if (*num_keys < 640) {
            bk_pieces[BISHOP][BLACK][sq_ind] = key;
        } else if (*num_keys < 704) {
            bk_pieces[QUEEN][BLACK][sq_ind] = key;
        } else if (*num_keys < 768) {
            bk_pieces[KING][BLACK][sq_ind] = key;
        } else if (*num_keys==768) {
            bk_ptm[WHITE] = key;
        } else if (*num_keys==769) {
            bk_ptm[BLACK] = key;
        } else if (*num_keys==770) {
            bk_castling_rights[bk_cr_bq] = key;
        } else if (*num_keys==771) {
            bk_castling_rights[bk_cr_bk] = key;
        } else if (*num_keys==772) {
            bk_castling_rights[bk_cr_wq] = key;
        } else if (*num_keys==773) {
            bk_castling_rights[bk_cr_wk] = key;
        } else if (*num_keys < 838) {
            int32 ep_sq_ind = *num_keys-774;
            bk_ep[ep_sq_ind] = key;
        }

        (*num_keys)++;
    }


    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
cmpl $0x1, -0xc(%rbp)
jne 0x5989
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x5989
movq -0x18(%rbp), %rax
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0x2030
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movl (%rax), %eax
movl $0x40, %ecx
cltd
idivl %ecx
movl %edx, -0x34(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x40, (%rax)
jge 0x56d6
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7fa7(%rip), %rax     # 0xcd670
movq %rdx, 0x600(%rax,%rcx,8)
jmp 0x597e
movq -0x28(%rbp), %rax
cmpl $0x80, (%rax)
jge 0x56fe
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7f7f(%rip), %rax     # 0xcd670
movq %rdx, 0x1200(%rax,%rcx,8)
jmp 0x597c
movq -0x28(%rbp), %rax
cmpl $0xc0, (%rax)
jge 0x5726
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7f57(%rip), %rax     # 0xcd670
movq %rdx, 0xa00(%rax,%rcx,8)
jmp 0x597a
movq -0x28(%rbp), %rax
cmpl $0x100, (%rax)          # imm = 0x100
jge 0x574e
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7f2f(%rip), %rax     # 0xcd670
movq %rdx, 0xe00(%rax,%rcx,8)
jmp 0x5978
movq -0x28(%rbp), %rax
cmpl $0x140, (%rax)          # imm = 0x140
jge 0x5776
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7f07(%rip), %rax     # 0xcd670
movq %rdx, 0x1600(%rax,%rcx,8)
jmp 0x5976
movq -0x28(%rbp), %rax
cmpl $0x180, (%rax)          # imm = 0x180
jge 0x579e
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7edf(%rip), %rax     # 0xcd670
movq %rdx, 0x1a00(%rax,%rcx,8)
jmp 0x5974
movq -0x28(%rbp), %rax
cmpl $0x1c0, (%rax)          # imm = 0x1C0
jge 0x57c6
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7eb7(%rip), %rax     # 0xcd670
movq %rdx, 0x400(%rax,%rcx,8)
jmp 0x5972
movq -0x28(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jge 0x57ee
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7e8f(%rip), %rax     # 0xcd670
movq %rdx, 0x1000(%rax,%rcx,8)
jmp 0x5970
movq -0x28(%rbp), %rax
cmpl $0x240, (%rax)          # imm = 0x240
jge 0x5816
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7e67(%rip), %rax     # 0xcd670
movq %rdx, 0x800(%rax,%rcx,8)
jmp 0x596e
movq -0x28(%rbp), %rax
cmpl $0x280, (%rax)          # imm = 0x280
jge 0x583e
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7e3f(%rip), %rax     # 0xcd670
movq %rdx, 0xc00(%rax,%rcx,8)
jmp 0x596c
movq -0x28(%rbp), %rax
cmpl $0x2c0, (%rax)          # imm = 0x2C0
jge 0x5866
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7e17(%rip), %rax     # 0xcd670
movq %rdx, 0x1400(%rax,%rcx,8)
jmp 0x596a
movq -0x28(%rbp), %rax
cmpl $0x300, (%rax)          # imm = 0x300
jge 0x588e
movq -0x30(%rbp), %rdx
movslq -0x34(%rbp), %rcx
leaq 0xc7def(%rip), %rax     # 0xcd670
movq %rdx, 0x1800(%rax,%rcx,8)
jmp 0x5968
movq -0x28(%rbp), %rax
cmpl $0x300, (%rax)          # imm = 0x300
jne 0x58aa
movq -0x30(%rbp), %rax
movq %rax, 0xc99d3(%rip)     # 0xcf278
jmp 0x5966
movq -0x28(%rbp), %rax
cmpl $0x301, (%rax)          # imm = 0x301
jne 0x58c6
movq -0x30(%rbp), %rax
movq %rax, 0xc99af(%rip)     # 0xcf270
jmp 0x5964
movq -0x28(%rbp), %rax
cmpl $0x302, (%rax)          # imm = 0x302
jne 0x58e2
movq -0x30(%rbp), %rax
movq %rax, 0xc99a3(%rip)     # 0xcf280
jmp 0x5962
movq -0x28(%rbp), %rax
cmpl $0x303, (%rax)          # imm = 0x303
jne 0x58fb
movq -0x30(%rbp), %rax
movq %rax, 0xc998f(%rip)     # 0xcf288
jmp 0x5960
movq -0x28(%rbp), %rax
cmpl $0x304, (%rax)          # imm = 0x304
jne 0x5914
movq -0x30(%rbp), %rax
movq %rax, 0xc997e(%rip)     # 0xcf290
jmp 0x595e
movq -0x28(%rbp), %rax
cmpl $0x305, (%rax)          # imm = 0x305
jne 0x592d
movq -0x30(%rbp), %rax
movq %rax, 0xc996d(%rip)     # 0xcf298
jmp 0x595c
movq -0x28(%rbp), %rax
cmpl $0x346, (%rax)          # imm = 0x346
jge 0x595a
movq -0x28(%rbp), %rax
movl (%rax), %eax
subl $0x306, %eax            # imm = 0x306
movl %eax, -0x38(%rbp)
movq -0x30(%rbp), %rdx
movslq -0x38(%rbp), %rcx
leaq 0xc994a(%rip), %rax     # 0xcf2a0
movq %rdx, (%rax,%rcx,8)
jmp 0x595c
jmp 0x595e
jmp 0x5960
jmp 0x5962
jmp 0x5964
jmp 0x5966
jmp 0x5968
jmp 0x596a
jmp 0x596c
jmp 0x596e
jmp 0x5970
jmp 0x5972
jmp 0x5974
jmp 0x5976
jmp 0x5978
jmp 0x597a
jmp 0x597c
jmp 0x597e
movq -0x28(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
xorl %eax, %eax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)