// File: /workspace/github_cpp_makefile_star2_O2/Lut99[P]RayTracer/src/lib/animations/camera/CameraRotation.cpp
// Function: RayTracer::CameraRotation::from_json(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>)
CameraRotation* CameraRotation::from_json(json json_obj) {
    // Check if the object has an object type
    if (!json_obj.is_object()) {
        throw InvalidObjectFormat("CameraRotation", json::object().type_name(), json_obj.type_name());
    }

    // Check if the required field exist
    if (json_obj["loop_time"].is_null()) {
        throw MissingFieldException("CameraRotation", "loop_time");
    }

    // Try to parse the required fields
    chrono::seconds loop_time;
    try {
        loop_time = chrono::seconds(json_obj["loop_time"].get<long>());
    } catch (nlohmann::detail::type_error&) {
        throw InvalidFieldFormat("CameraRotation", "loop_time", "long", json_obj["loop_time"].type_name());
    }
    return new CameraRotation(loop_time);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdi, %r15
cmpb $0x1, (%rdi)
jne 0x88160
leaq 0xade2(%rip), %rsi      # 0x92ef0
movq %r15, %rdi
callq 0x56e34
cmpb $0x0, (%rax)
je 0x88210
leaq 0xadca(%rip), %rsi      # 0x92ef0
movq %r15, %rdi
callq 0x56e34
movq %rax, %rdi
callq 0x8846c
movq %rax, %rbx
pushq $0x50
popq %rdi
callq 0x52470
movq %rax, %r14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x87e4a
movq %r14, %rax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movl $0x88, %edi
callq 0x52220
movq %rax, %r14
leaq 0xad86(%rip), %rsi      # 0x92efa
leaq 0x118(%rsp), %rdi
leaq 0x5(%rsp), %rdx
callq 0x56548
leaq 0x8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x8067c
leaq 0x8(%rsp), %rdi
callq 0x6f406
leaq 0xf8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
movq %rax, %rsi
callq 0x56548
movq %r15, %rdi
callq 0x6f406
leaq 0xd8(%rsp), %rdi
leaq 0x6(%rsp), %rdx
movq %rax, %rsi
callq 0x56548
movb $0x1, %bpl
leaq 0x118(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
leaq 0xd8(%rsp), %rcx
movq %r14, %rdi
callq 0x7f052
xorl %ebp, %ebp
leaq 0x292bc(%rip), %rsi     # 0xb14b8
leaq -0x905d(%rip), %rdx     # 0x7f1a6
movq %r14, %rdi
callq 0x52760
jmp 0x883e5
pushq $0x68
popq %rdi
callq 0x52220
movq %rax, %r14
leaq 0xacd8(%rip), %rsi      # 0x92efa
leaq 0xb8(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x56548
leaq 0xacb5(%rip), %rsi      # 0x92ef0
leaq 0x98(%rsp), %rdi
leaq 0x5(%rsp), %rdx
callq 0x56548
movb $0x1, %bpl
leaq 0xb8(%rsp), %rsi
leaq 0x98(%rsp), %rdx
movq %r14, %rdi
callq 0x80690
xorl %ebp, %ebp
leaq 0x29397(%rip), %rsi     # 0xb1608
leaq -0x7b18(%rip), %rdx     # 0x80760
movq %r14, %rdi
callq 0x52760
jmp 0x883e5
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
callq 0x52888
jmp 0x8829d
movq %rax, %rbx
movb $0x1, %bpl
leaq 0xf8(%rsp), %rdi
callq 0x52888
jmp 0x882b2
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x8(%rsp), %rdi
callq 0x56fca
jmp 0x882e6
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x52888
jmp 0x882d6
movq %rax, %rbx
movb $0x1, %bpl
leaq 0xb8(%rsp), %rdi
jmp 0x882ee
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x118(%rsp), %rdi
callq 0x52888
testb %bpl, %bpl
jne 0x88302
jmp 0x88441
jmp 0x882ff
movq %rax, %rbx
movq %r14, %rdi
callq 0x52350
jmp 0x88441
movq %rax, %rbx
pushq $0x50
popq %rsi
movq %r14, %rdi
callq 0x52480
jmp 0x88441
movq %rax, %rbx
cmpl $0x1, %edx
jne 0x88441
movq %rbx, %rdi
callq 0x521b0
movl $0xa8, %edi
callq 0x52220
movq %rax, %r14
leaq 0xabb0(%rip), %rsi      # 0x92efa
leaq 0x78(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x56548
leaq 0xab90(%rip), %rsi      # 0x92ef0
leaq 0x58(%rsp), %rdi
leaq 0x5(%rsp), %rdx
callq 0x56548
leaq 0xa268(%rip), %rsi      # 0x925de
leaq 0x38(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x56548
leaq 0xab64(%rip), %rsi      # 0x92ef0
movq %r15, %rdi
callq 0x56e34
movq %rax, %rdi
callq 0x6f406
leaq 0x18(%rsp), %rdi
leaq 0x6(%rsp), %rdx
movq %rax, %rsi
callq 0x56548
movb $0x1, %bpl
leaq 0x78(%rsp), %rsi
leaq 0x58(%rsp), %rdx
leaq 0x38(%rsp), %rcx
leaq 0x18(%rsp), %r8
movq %r14, %rdi
callq 0x8079c
xorl %ebp, %ebp
leaq 0x2924a(%rip), %rsi     # 0xb1620
leaq -0x7a4f(%rip), %rdx     # 0x8098e
movq %r14, %rdi
callq 0x52760
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x52888
jmp 0x883fc
jmp 0x883f6
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x38(%rsp), %rdi
callq 0x52888
jmp 0x8840e
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x58(%rsp), %rdi
callq 0x52888
jmp 0x88420
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x78(%rsp), %rdi
callq 0x52888
testb %bpl, %bpl
jne 0x88434
jmp 0x8843c
movq %rax, %rbx
movq %r14, %rdi
callq 0x52350
callq 0x52720
movq %rbx, %rdi
callq 0x527a0
movq %rax, %rdi
callq 0x56ca4
nop