// File: bjohnsonfl[P]Overhead-Chess-Engine-/UCI.cpp
// Function: UCI::parseGo(std::__cxx11::basic_istringstream<char, std::char_traits<char>, std::allocator<char>>&)
void UCI::parseGo(std::istringstream &stream)
{
    std::string token = "";
    while(stream >> token){
    
        if(token == "wtime") {
            stream >> token;
            wTime = std::stoi(token);
        }
        else if (token == "btime"){
            stream >> token;
            bTime = std::stoi(token);
        }
        else if (token == "winc"){
            stream >> token;
            wInc = std::stoi(token);
        }
        else if (token == "binc"){
            stream >> token;
            bInc = std::stoi(token);
        }
        else if (token == "depth"){
            stream >> token;
            depth = std::stoi(token);
        }
        else if (token == "movetime"){
            stream >> token;
            moveTime = std::stoi(token);
        }
        else if (token == "perft"){
            stream >> token;
            bitboard nodes = 0;
            clock_t t;
            std::cout <<"Starting Perft... \n\n";
            t = clock();
            nodes= perftDivide(5, pos);
            t = clock() - t;
            logFile.open("log.txt",std::ofstream::app);
            std::cout << "nodes = " << nodes << " seconds: " << float(t)/CLOCKS_PER_SEC << std::endl;
            std::cout << "totalNodes = " << pos.get_nodes() << "\n";
            logFile << "nodes = " << nodes << " seconds: " << float(t)/CLOCKS_PER_SEC << std::endl;
            logFile.close();
            
        }
    }
    
    //search
    pos.reset_nodes();
    clock_t t;
    t= clock();
    rootSearch(pos);
    t = clock() - t;
    std::cout << "bestmove " << moveToString(pos.bestMove) << "\n";
   std::cout << "nodes = " << pos.get_nodes() << " seconds: " << float(t)/CLOCKS_PER_SEC << std::endl;
    int nps = pos.get_nodes() / (float(t)/CLOCKS_PER_SEC);
    int k = 1;
    if( (pos.get_material(white) + pos.get_material(black)) >= gamePhaseCutoff) k = 0;
    std::cout << "info score cp "<<valueee<<" nodes " << pos.get_nodes() << " nps " << nps << " string " << k << "\n";
   ;
    
    int totalstates = totalState(pos.get_returnState());
    std::cout << " totalstates: " <<totalstates << "\n";
    
    
    logFile.open("log.txt" , std::ofstream::app);
    logFile << "info score cp "<<valueee<<" nodes " << pos.get_nodes() << " nps " << nps << " string " << k << " totalstates: " <<totalstates <<"\n";
    logFile << "/////////////////////// \n";
    
    
    logFile.close();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x33a0
movq -0x98(%rbp), %rdx
leaq 0x26ca(%rip), %rsi      # 0xe3c6
leaq -0x30(%rbp), %rdi
callq 0x3b70
jmp 0xbd07
leaq -0x31(%rbp), %rdi
callq 0x3230
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
movq %rax, -0xa8(%rbp)
jmp 0xbd26
movq -0xa8(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x3290
movb %al, -0xa9(%rbp)
jmp 0xbd44
movb -0xa9(%rbp), %al
testb $0x1, %al
jne 0xbd53
jmp 0xc22e
leaq 0x27df(%rip), %rsi      # 0xe539
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xaa(%rbp)
jmp 0xbd6b
movb -0xaa(%rbp), %al
testb $0x1, %al
jne 0xbd77
jmp 0xbddf
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbd86
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
movl $0xa, %edx
callq 0xce10
movl %eax, -0xb0(%rbp)
jmp 0xbda0
movq -0xa0(%rbp), %rax
movl -0xb0(%rbp), %ecx
movl %ecx, (%rax)
jmp 0xc229
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x3230
jmp 0xc7ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xc7e3
leaq 0x2759(%rip), %rsi      # 0xe53f
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xb1(%rbp)
jmp 0xbdf7
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0xbe03
jmp 0xbe41
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbe12
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
movl $0xa, %edx
callq 0xce10
movl %eax, -0xb8(%rbp)
jmp 0xbe2c
movq -0xa0(%rbp), %rax
movl -0xb8(%rbp), %ecx
movl %ecx, 0x4(%rax)
jmp 0xc227
leaq 0x26fd(%rip), %rsi      # 0xe545
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xb9(%rbp)
jmp 0xbe59
movb -0xb9(%rbp), %al
testb $0x1, %al
jne 0xbe65
jmp 0xbea3
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbe74
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
movl $0xa, %edx
callq 0xce10
movl %eax, -0xc0(%rbp)
jmp 0xbe8e
movq -0xa0(%rbp), %rax
movl -0xc0(%rbp), %ecx
movl %ecx, 0x8(%rax)
jmp 0xc225
leaq 0x26a0(%rip), %rsi      # 0xe54a
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xc1(%rbp)
jmp 0xbebb
movb -0xc1(%rbp), %al
testb $0x1, %al
jne 0xbec7
jmp 0xbf05
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbed6
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
movl $0xa, %edx
callq 0xce10
movl %eax, -0xc8(%rbp)
jmp 0xbef0
movq -0xa0(%rbp), %rax
movl -0xc8(%rbp), %ecx
movl %ecx, 0xc(%rax)
jmp 0xc223
leaq 0x2643(%rip), %rsi      # 0xe54f
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xc9(%rbp)
jmp 0xbf1d
movb -0xc9(%rbp), %al
testb $0x1, %al
jne 0xbf29
jmp 0xbf67
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbf38
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
movl $0xa, %edx
callq 0xce10
movl %eax, -0xd0(%rbp)
jmp 0xbf52
movq -0xa0(%rbp), %rax
movl -0xd0(%rbp), %ecx
movl %ecx, 0x10(%rax)
jmp 0xc221
leaq 0x25e7(%rip), %rsi      # 0xe555
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xd1(%rbp)
jmp 0xbf7f
movb -0xd1(%rbp), %al
testb $0x1, %al
jne 0xbf8b
jmp 0xbfc9
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbf9a
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
movl $0xa, %edx
callq 0xce10
movl %eax, -0xd8(%rbp)
jmp 0xbfb4
movq -0xa0(%rbp), %rax
movl -0xd8(%rbp), %ecx
movl %ecx, 0x14(%rax)
jmp 0xc21f
leaq 0x258e(%rip), %rsi      # 0xe55e
leaq -0x30(%rbp), %rdi
callq 0xa080
movb %al, -0xd9(%rbp)
jmp 0xbfe1
movb -0xd9(%rbp), %al
testb $0x1, %al
jne 0xbff0
jmp 0xc21d
movq -0x10(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x32a0
jmp 0xbfff
movq $0x0, -0x50(%rbp)
movq 0x5fba(%rip), %rdi      # 0x11fc8
leaq 0x254f(%rip), %rsi      # 0xe564
callq 0x31e0
jmp 0xc01c
callq 0x3140
movq -0xa0(%rbp), %rsi
movq %rax, -0x58(%rbp)
addq $0x18, %rsi
movl $0x5, %edi
callq 0xa830
movq %rax, -0xe8(%rbp)
jmp 0xc043
movq -0xe8(%rbp), %rax
movq %rax, -0x50(%rbp)
callq 0x3140
movq -0xa0(%rbp), %rdi
movq -0x58(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x58(%rbp)
addq $0x1b0, %rdi            # imm = 0x1B0
leaq 0x24a5(%rip), %rsi      # 0xe518
movl $0x1, %edx
callq 0x3040
jmp 0xc07f
movq 0x5f42(%rip), %rdi      # 0x11fc8
leaq 0x24ec(%rip), %rsi      # 0xe579
callq 0x31e0
movq %rax, -0xf0(%rbp)
jmp 0xc09b
movq -0xf0(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x3070
movq %rax, -0xf8(%rbp)
jmp 0xc0b4
movq -0xf8(%rbp), %rdi
leaq 0x24c0(%rip), %rsi      # 0xe582
callq 0x31e0
movq %rax, -0x100(%rbp)
jmp 0xc0d0
movq -0x100(%rbp), %rdi
cvtsi2ssq -0x58(%rbp), %xmm0
movss 0x23a3(%rip), %xmm1     # 0xe488
divss %xmm1, %xmm0
callq 0x3180
movq %rax, -0x108(%rbp)
jmp 0xc0f7
movq -0x108(%rbp), %rdi
movq 0x5eab(%rip), %rsi      # 0x11fb0
callq 0x3210
jmp 0xc10c
movq 0x5eb5(%rip), %rdi      # 0x11fc8
leaq 0x2473(%rip), %rsi      # 0xe58d
callq 0x31e0
movq %rax, -0x110(%rbp)
jmp 0xc128
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce50
movq %rax, -0x118(%rbp)
jmp 0xc141
movq -0x118(%rbp), %rsi
movq -0x110(%rbp), %rdi
callq 0x3070
movq %rax, -0x120(%rbp)
jmp 0xc15d
movq -0x120(%rbp), %rdi
leaq 0x225a(%rip), %rsi      # 0xe3c5
callq 0x31e0
jmp 0xc172
movq -0xa0(%rbp), %rdi
addq $0x1b0, %rdi            # imm = 0x1B0
leaq 0x23f2(%rip), %rsi      # 0xe579
callq 0x31e0
movq %rax, -0x128(%rbp)
jmp 0xc195
movq -0x128(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x3070
movq %rax, -0x130(%rbp)
jmp 0xc1ae
movq -0x130(%rbp), %rdi
leaq 0x23c6(%rip), %rsi      # 0xe582
callq 0x31e0
movq %rax, -0x138(%rbp)
jmp 0xc1ca
movq -0x138(%rbp), %rdi
cvtsi2ssq -0x58(%rbp), %xmm0
movss 0x22a9(%rip), %xmm1     # 0xe488
divss %xmm1, %xmm0
callq 0x3180
movq %rax, -0x140(%rbp)
jmp 0xc1f1
movq -0x140(%rbp), %rdi
movq 0x5db1(%rip), %rsi      # 0x11fb0
callq 0x3210
jmp 0xc206
movq -0xa0(%rbp), %rdi
addq $0x1b0, %rdi            # imm = 0x1B0
callq 0x32f0
jmp 0xc21b
jmp 0xc21d
jmp 0xc21f
jmp 0xc221
jmp 0xc223
jmp 0xc225
jmp 0xc227
jmp 0xc229
jmp 0xbd10
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce70
jmp 0xc240
callq 0x3140
movq -0xa0(%rbp), %rdi
movq %rax, -0x60(%rbp)
addq $0x18, %rdi
callq 0xa930
jmp 0xc25b
callq 0x3140
movq -0x60(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x60(%rbp)
movq 0x5d56(%rip), %rdi      # 0x11fc8
leaq 0x2322(%rip), %rsi      # 0xe59b
callq 0x31e0
movq %rax, -0x148(%rbp)
jmp 0xc287
movq -0xa0(%rbp), %rsi
movl 0x1a8(%rsi), %edx
leaq -0x80(%rbp), %rdi
callq 0xc8f0
jmp 0xc29f
movq -0x148(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x31d0
movq %rax, -0x150(%rbp)
jmp 0xc2b8
movq -0x150(%rbp), %rdi
leaq 0x20ff(%rip), %rsi      # 0xe3c5
callq 0x31e0
jmp 0xc2cd
leaq -0x80(%rbp), %rdi
callq 0x3408
movq 0x5ceb(%rip), %rdi      # 0x11fc8
leaq 0x2295(%rip), %rsi      # 0xe579
callq 0x31e0
movq %rax, -0x158(%rbp)
jmp 0xc2f2
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce50
movq %rax, -0x160(%rbp)
jmp 0xc30b
movq -0x160(%rbp), %rsi
movq -0x158(%rbp), %rdi
callq 0x3070
movq %rax, -0x168(%rbp)
jmp 0xc327
movq -0x168(%rbp), %rdi
leaq 0x224d(%rip), %rsi      # 0xe582
callq 0x31e0
movq %rax, -0x170(%rbp)
jmp 0xc343
movq -0x170(%rbp), %rdi
cvtsi2ssq -0x60(%rbp), %xmm0
movss 0x2130(%rip), %xmm1     # 0xe488
divss %xmm1, %xmm0
callq 0x3180
movq %rax, -0x178(%rbp)
jmp 0xc36a
movq -0x178(%rbp), %rdi
movq 0x5c38(%rip), %rsi      # 0x11fb0
callq 0x3210
jmp 0xc37f
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce50
movq %rax, -0x180(%rbp)
jmp 0xc398
movq -0x180(%rbp), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, -0x188(%rbp)
testq %rax, %rax
movss %xmm0, -0x184(%rbp)
js 0xc3e0
movss -0x188(%rbp), %xmm0
movss %xmm0, -0x184(%rbp)
movq -0xa0(%rbp), %rdi
movss -0x184(%rbp), %xmm0
cvtsi2ssq -0x60(%rbp), %xmm1
movss 0x208b(%rip), %xmm2     # 0xe488
divss %xmm2, %xmm1
divss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x84(%rbp)
movl $0x1, -0x88(%rbp)
addq $0x18, %rdi
xorl %esi, %esi
callq 0xb310
movl %eax, -0x18c(%rbp)
jmp 0xc42c
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
movl $0x1, %esi
callq 0xb310
movl %eax, -0x190(%rbp)
jmp 0xc449
movl -0x190(%rbp), %esi
movl -0x18c(%rbp), %edi
callq 0xa0f0
movl %eax, -0x194(%rbp)
jmp 0xc462
movl -0x194(%rbp), %eax
leaq 0xeb721(%rip), %rcx     # 0xf7b90
cmpl (%rcx), %eax
jl 0xc499
movl $0x0, -0x88(%rbp)
jmp 0xc499
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x3408
jmp 0xc7e3
movq 0x5b28(%rip), %rdi      # 0x11fc8
leaq 0x20fe(%rip), %rsi      # 0xe5a5
callq 0x31e0
movq %rax, -0x1a0(%rbp)
jmp 0xc4b5
movq -0x1a0(%rbp), %rdi
leaq 0xeb56d(%rip), %rax     # 0xf7a30
movl (%rax), %esi
callq 0x3380
movq %rax, -0x1a8(%rbp)
jmp 0xc4d3
movq -0x1a8(%rbp), %rdi
leaq 0x20d3(%rip), %rsi      # 0xe5b4
callq 0x31e0
movq %rax, -0x1b0(%rbp)
jmp 0xc4ef
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce50
movq %rax, -0x1b8(%rbp)
jmp 0xc508
movq -0x1b8(%rbp), %rsi
movq -0x1b0(%rbp), %rdi
callq 0x3070
movq %rax, -0x1c0(%rbp)
jmp 0xc524
movq -0x1c0(%rbp), %rdi
leaq 0x208a(%rip), %rsi      # 0xe5bc
callq 0x31e0
movq %rax, -0x1c8(%rbp)
jmp 0xc540
movq -0x1c8(%rbp), %rdi
movl -0x84(%rbp), %esi
callq 0x3380
movq %rax, -0x1d0(%rbp)
jmp 0xc55b
movq -0x1d0(%rbp), %rdi
leaq 0x2059(%rip), %rsi      # 0xe5c2
callq 0x31e0
movq %rax, -0x1d8(%rbp)
jmp 0xc577
movq -0x1d8(%rbp), %rdi
movl -0x88(%rbp), %esi
callq 0x3380
movq %rax, -0x1e0(%rbp)
jmp 0xc592
movq -0x1e0(%rbp), %rdi
leaq 0x1e25(%rip), %rsi      # 0xe3c5
callq 0x31e0
jmp 0xc5a7
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce90
movq %rax, -0x1e8(%rbp)
jmp 0xc5c0
movq -0x1e8(%rbp), %rsi
movq -0xa0(%rbp), %rdi
callq 0xcce0
movl %eax, -0x1ec(%rbp)
jmp 0xc5db
movl -0x1ec(%rbp), %eax
movl %eax, -0x8c(%rbp)
movq 0x59da(%rip), %rdi      # 0x11fc8
leaq 0x1fd6(%rip), %rsi      # 0xe5cb
callq 0x31e0
movq %rax, -0x1f8(%rbp)
jmp 0xc603
movq -0x1f8(%rbp), %rdi
movl -0x8c(%rbp), %esi
callq 0x3380
movq %rax, -0x200(%rbp)
jmp 0xc61e
movq -0x200(%rbp), %rdi
leaq 0x1d99(%rip), %rsi      # 0xe3c5
callq 0x31e0
jmp 0xc633
movq -0xa0(%rbp), %rdi
addq $0x1b0, %rdi            # imm = 0x1B0
leaq 0x1ed0(%rip), %rsi      # 0xe518
movl $0x1, %edx
callq 0x3040
jmp 0xc654
movq -0xa0(%rbp), %rdi
addq $0x1b0, %rdi            # imm = 0x1B0
leaq 0x1f3c(%rip), %rsi      # 0xe5a5
callq 0x31e0
movq %rax, -0x208(%rbp)
jmp 0xc677
movq -0x208(%rbp), %rdi
leaq 0xeb3ab(%rip), %rax     # 0xf7a30
movl (%rax), %esi
callq 0x3380
movq %rax, -0x210(%rbp)
jmp 0xc695
movq -0x210(%rbp), %rdi
leaq 0x1f11(%rip), %rsi      # 0xe5b4
callq 0x31e0
movq %rax, -0x218(%rbp)
jmp 0xc6b1
movq -0xa0(%rbp), %rdi
addq $0x18, %rdi
callq 0xce50
movq %rax, -0x220(%rbp)
jmp 0xc6ca
movq -0x220(%rbp), %rsi
movq -0x218(%rbp), %rdi
callq 0x3070
movq %rax, -0x228(%rbp)
jmp 0xc6e6
movq -0x228(%rbp), %rdi
leaq 0x1ec8(%rip), %rsi      # 0xe5bc
callq 0x31e0
movq %rax, -0x230(%rbp)
jmp 0xc702
movq -0x230(%rbp), %rdi
movl -0x84(%rbp), %esi
callq 0x3380
movq %rax, -0x238(%rbp)
jmp 0xc71d
movq -0x238(%rbp), %rdi
leaq 0x1e97(%rip), %rsi      # 0xe5c2
callq 0x31e0
movq %rax, -0x240(%rbp)
jmp 0xc739
movq -0x240(%rbp), %rdi
movl -0x88(%rbp), %esi
callq 0x3380
movq %rax, -0x248(%rbp)
jmp 0xc754
movq -0x248(%rbp), %rdi
leaq 0x1e69(%rip), %rsi      # 0xe5cb
callq 0x31e0
movq %rax, -0x250(%rbp)
jmp 0xc770
movq -0x250(%rbp), %rdi
movl -0x8c(%rbp), %esi
callq 0x3380
movq %rax, -0x258(%rbp)
jmp 0xc78b
movq -0x258(%rbp), %rdi
leaq 0x1c2c(%rip), %rsi      # 0xe3c5
callq 0x31e0
jmp 0xc7a0
movq -0xa0(%rbp), %rdi
addq $0x1b0, %rdi            # imm = 0x1B0
leaq 0x1e25(%rip), %rsi      # 0xe5da
callq 0x31e0
jmp 0xc7bc
movq -0xa0(%rbp), %rdi
addq $0x1b0, %rdi            # imm = 0x1B0
callq 0x32f0
jmp 0xc7d1
leaq -0x30(%rbp), %rdi
callq 0x3408
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0x3408
movq -0x40(%rbp), %rdi
callq 0x3390
nopw %cs:(%rax,%rax)