// File: gkosae[P]ArduinoNeuralNet/main.cpp
// Function: main
int main(int argc, char* argv[]) {
    Layer input_layer{10, 10};
    Layer hidden_layer{2, 10};
    Layer output_layer{2, 2};

    NeuralNet network{};
    network.addLayer(input_layer);
    network.addLayer(hidden_layer);
    network.addLayer(output_layer);

    network.train(createInputSamples(), createOutputSamples());
    network.printNetworkInfo();
    network.generateArduinoCode();
    testNetwork(network);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x40(%rbp), %rdi
movl $0xa, %edx
movl %edx, -0x248(%rbp)
movl %edx, %esi
callq 0x4130
movl -0x248(%rbp), %edx
leaq -0x70(%rbp), %rdi
movl $0x2, %esi
callq 0x4130
jmp 0xa21e
leaq -0xb0(%rbp), %rdi
movl $0x2, %edx
movl %edx, %esi
callq 0x4130
jmp 0xa233
leaq -0x138(%rbp), %rdi
callq 0xb040
jmp 0xa241
leaq -0x168(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xb140
jmp 0xa253
leaq -0x138(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0xb110
jmp 0xa268
leaq -0x168(%rbp), %rdi
callq 0xb1a0
leaq -0x198(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0xb140
jmp 0xa286
leaq -0x138(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0xb110
jmp 0xa29b
leaq -0x198(%rbp), %rdi
callq 0xb1a0
leaq -0x1c8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0xb140
jmp 0xa2bc
leaq -0x138(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0xb110
jmp 0xa2d1
leaq -0x1c8(%rbp), %rdi
callq 0xb1a0
leaq -0x1e0(%rbp), %rdi
callq 0xa5b0
jmp 0xa2eb
leaq -0x1f8(%rbp), %rdi
callq 0xa890
jmp 0xa2f9
leaq -0x138(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
leaq -0x1f8(%rbp), %rdx
movsd 0x416a(%rip), %xmm0     # 0xe480
movsd 0x416a(%rip), %xmm1     # 0xe488
movl $0xc350, %ecx           # imm = 0xC350
callq 0x5ae0
jmp 0xa32a
leaq -0x1f8(%rbp), %rdi
callq 0x80b0
leaq -0x1e0(%rbp), %rdi
callq 0x80b0
leaq -0x219(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x2320
movq -0x250(%rbp), %rdx
leaq 0x413d(%rip), %rsi      # 0xe4a0
leaq -0x218(%rbp), %rdi
callq 0x2dd0
jmp 0xa371
leaq -0x138(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x6940
jmp 0xa386
leaq -0x218(%rbp), %rdi
callq 0x20c0
leaq -0x219(%rbp), %rdi
callq 0x21e0
leaq -0x241(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x2320
movq -0x258(%rbp), %rdx
leaq 0x40f0(%rip), %rsi      # 0xe4af
leaq -0x240(%rbp), %rdi
callq 0x2dd0
jmp 0xa3cd
leaq -0x138(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x6f40
jmp 0xa3e2
leaq -0x240(%rbp), %rdi
callq 0x20c0
leaq -0x241(%rbp), %rdi
callq 0x21e0
leaq -0x138(%rbp), %rdi
callq 0xaa20
jmp 0xa408
leaq -0x138(%rbp), %rdi
callq 0xb1d0
leaq -0xb0(%rbp), %rdi
callq 0xb1a0
leaq -0x70(%rbp), %rdi
callq 0xb1a0
leaq -0x40(%rbp), %rdi
callq 0xb1a0
xorl %eax, %eax
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa593
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa58a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa57e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0xb1a0
jmp 0xa572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x198(%rbp), %rdi
callq 0xb1a0
jmp 0xa572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0xb1a0
jmp 0xa572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa4fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x80b0
leaq -0x1e0(%rbp), %rdi
callq 0x80b0
jmp 0xa572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa532
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x20c0
leaq -0x219(%rbp), %rdi
callq 0x21e0
jmp 0xa572
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xa566
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x20c0
leaq -0x241(%rbp), %rdi
callq 0x21e0
leaq -0x138(%rbp), %rdi
callq 0xb1d0
leaq -0xb0(%rbp), %rdi
callq 0xb1a0
leaq -0x70(%rbp), %rdi
callq 0xb1a0
leaq -0x40(%rbp), %rdi
callq 0xb1a0
movq -0x78(%rbp), %rdi
callq 0x2310
nopw %cs:(%rax,%rax)