// File: /workspace/github_cpp_makefile_star2_O1/logicx24[P]RayTracer/raytracer.cpp
// Function: parseSceneFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, float, int, int)
Scene* parseSceneFile(string fileName, float eps, int width, int height) {
    float sp;
    vec3 eye, ll, lr, ul, ur, ka, kd, ks, kr;

    mat4 currTrans = identity3D();

    Film film = Film(width, height);
    Camera pcam;
    Scene *scene;

    Material curMat;
    vector<Polygon*> sceneObjects;
    vector<Light*> sceneLights;
    vector<vec3> vertices;
    vector<mat4> transforms;
    transforms.push_back(identity3D());

    int index = 0;
    string argument;
    string curline;
    ifstream myfile (fileName);
    if (myfile.is_open()){
        while (getline (myfile, curline)) {
            istringstream iss;
            iss.str(curline);
            iss >> argument;

            if (curline.empty()){
                continue;
            } else if (argumentMatches(argument, "cam")) {
                float args[15];
                parseArgs(args, &iss, 15, "Incorrect number of arguments for camera");
                eye = vec3(args[0], args[1], args[2]);
                ll = vec3(args[3], args[4], args[5]);
                lr = vec3(args[6], args[7], args[8]);
                ul = vec3(args[9], args[10], args[11]);
                ur = vec3(args[12], args[13], args[14]);

                pcam = Camera(eye, ul, ur, ll, lr, width, height);
                scene = new Scene(pcam, film, eps, width, height);

            } else if (argumentMatches(argument, "mat")) {
                float args[13];
                parseArgs(args, &iss, 13, "Incorrect number of arguments for material.");
                ka = vec3(args[0],args[1],args[2]);
                kd = vec3(args[3],args[4],args[5]);
                ks = vec3(args[6],args[7],args[8]);
                sp = args[9];
                kr = vec3(args[10],args[11],args[12]);
                curMat = Material(ka,kd,ks, kr,sp);

            } else if (argumentMatches(argument, "sph")) {
                float args[4];
                parseArgs(args, &iss, 4, "Incorrect number of arguments for sphere.");
                vec3 sphereCenter = vec3(args[0],args[1],args[2]);
                mat4 currentTransform = reduceTransforms(&transforms);
                sceneObjects.push_back(new Sphere(sphereCenter, args[3], curMat, currentTransform));
            } else if (argumentMatches(argument, "tri")) {
                float args[9];
                parseArgs(args, &iss, 9, "Incorrect number of arguments for triangle.");
                vec3 v1 = vec3(args[0],args[1],args[2]);
                vec3 v2 = vec3(args[3],args[4],args[5]);
                vec3 v3 = vec3(args[6],args[7],args[8]);
                mat4 currentTransform = reduceTransforms(&transforms);
                sceneObjects.push_back(new Triangle(v1, v2, v3, curMat, currentTransform));
            } else if (argumentMatches(argument, "ltp")) {
                float args[6];
                int falloff = 0;
                string temp;
                int index = 0;
                while (iss >> temp){
                    if (index == 6){
                        falloff = atoi(temp.c_str());
                    } else {
                        args[index] = atof(temp.c_str());
                    }
                    index++;
                }
                if (index > 7 || index < 6){
                    cerr << "Incorrect number of arguments for point light." << endl;
                }
                vec3 color = vec3(args[3],args[4],args[5]);
                vec3 pos = vec3(args[0],args[1],args[2]);
                sceneLights.push_back(new Light(color, pos, falloff, true));

            } else if (argumentMatches(argument, "ltd")) {
                float args[6];
                parseArgs(args, &iss, 6, "Incorrect number of arguments for direct light.");
                vec3 color = vec3(args[3],args[4],args[5]);
                vec3 pos = vec3(args[0],args[1],args[2]);
                sceneLights.push_back(new Light(color, pos, 0, false));
            } else if (argumentMatches(argument, "lta")) {
                float args[3];
                parseArgs(args, &iss, 3, "Incorrect number of arguments for ambient light.");
                vec3 ambientColor = vec3(args[0], args[1], args[2]);
                Light ambientLight = Light(ambientColor);
                scene->addAmbientLight(ambientLight);
            } else if (argumentMatches(argument, "obj")) {
                string temp;
                iss >> temp;
                parseObj(temp.c_str(), &sceneObjects, &transforms, curMat);
            } else if (argumentMatches(argument, "xfs")) {
                float args[3];
                parseArgs(args, &iss, 3, "Incorrect number of arguments for scaling transformation.");
                vec3 transformation = vec3(args[0], args[1], args[2]);
                transforms.push_back(scaling3D(transformation));
            } else if (argumentMatches(argument, "xft")) {
                float args[3];
                parseArgs(args, &iss, 3, "Incorrect number of arguments for translation transformation.");
                vec3 transformation = vec3(args[0], args[1], args[2]);
                transforms.push_back(translation3D(transformation));
            } else if (argumentMatches(argument, "xfr")) {
                float args[3];
                parseArgs(args, &iss, 3, "Incorrect number of arguments for rotation transformation.");
                vec3 transformation = vec3(args[0], args[1], args[2]);
                transforms.push_back(rotation3D(transformation, magnitude(transformation)));
            } else if (argumentMatches(argument, "xfz")) {
                transforms.clear();
                transforms.push_back(identity3D());
            }
        }

        for (int i = 0; i < sceneObjects.size(); i++){
            scene->addObject(sceneObjects[i]);
        }
        for (int i = 0; i < sceneLights.size(); i++) {
            scene->addLight(sceneLights[i]);
        }

        myfile.close();

    } else {
        cerr << "No scene file found." << endl;
        exit(0);
    }
    return scene;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa48, %rsp            # imm = 0xA48
movss %xmm0, -0x1a4(%rbp)
movq %rdi, %rbx
leaq -0x520(%rbp), %rdi
movl %esi, -0x13c(%rbp)
movq %rdx, -0x1b0(%rbp)
callq 0x6df8
xorps %xmm0, %xmm0
movaps %xmm0, -0x2f0(%rbp)
movaps %xmm0, -0x300(%rbp)
movaps %xmm0, -0x310(%rbp)
movaps %xmm0, -0x320(%rbp)
movaps %xmm0, -0x330(%rbp)
movaps %xmm0, -0x340(%rbp)
movl $0x0, -0x2e0(%rbp)
xorl %eax, %eax
movq %rax, -0x170(%rbp)
movaps %xmm0, -0x180(%rbp)
movq %rax, -0x190(%rbp)
movaps %xmm0, -0x1a0(%rbp)
leaq -0x160(%rbp), %rdi
movq %rax, 0x10(%rdi)
movaps %xmm0, (%rdi)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
leaq -0x8f0(%rbp), %rsi
movq %rax, (%rsi)
movups %xmm0, 0x8(%rsi)
movups %xmm0, 0x18(%rsi)
movq %rax, 0x28(%rsi)
movups %xmm0, 0x30(%rsi)
movups %xmm0, 0x40(%rsi)
movq %rax, 0x50(%rsi)
movups %xmm0, 0x58(%rsi)
movups %xmm0, 0x68(%rsi)
movq %rax, 0x78(%rsi)
callq 0xa7cc
leaq -0x38(%rbp), %r15
movq %r15, -0x10(%r15)
xorl %eax, %eax
movq %rax, -0x8(%r15)
movb %al, (%r15)
leaq -0x110(%rbp), %r12
movq %r12, -0x10(%r12)
movq %rax, -0x8(%r12)
movb %al, (%r12)
leaq -0x8f0(%rbp), %rdi
movq %rbx, %rsi
movl $0x8, %edx
callq 0x33d0
leaq -0x878(%rbp), %rdi
callq 0x30a0
testb %al, %al
je 0x64a0
movl -0x13c(%rbp), %eax
movq -0x1b0(%rbp), %rcx
shlq $0x20, %rcx
orq %rax, %rcx
movq %rcx, -0x2d0(%rbp)
leaq -0x120(%rbp), %r14
leaq -0xa70(%rbp), %r12
leaq -0x8f0(%rbp), %rbx
movq -0x8f0(%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3490
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x6356
movq %r12, %rdi
callq 0x3180
leaq -0xa60(%rbp), %rdi
movq %r14, %rsi
callq 0x3370
movq %r12, %rdi
leaq -0x48(%rbp), %rsi
callq 0x32c0
cmpq $0x0, -0x118(%rbp)
je 0x5dd3
leaq -0x4f0(%rbp), %rax
movq %rax, -0x500(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x500(%rbp), %rdi
callq 0xa23e
movq -0x500(%rbp), %rbx
movq %rbx, %rdi
leaq 0x120a7(%rip), %rsi     # 0x17158
callq 0x3300
movl %eax, %r15d
leaq -0x4f0(%rbp), %rax
cmpq %rax, %rbx
je 0x50d7
movq -0x4f0(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x55b4
leaq -0x4d0(%rbp), %rax
movq %rax, -0x4e0(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4e0(%rbp), %rdi
callq 0xa23e
movq -0x4e0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x1206f(%rip), %rsi     # 0x17185
callq 0x3300
movl %eax, %r15d
leaq -0x4d0(%rbp), %rax
cmpq %rax, %rbx
je 0x513c
movq -0x4d0(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x5761
leaq -0x4b0(%rbp), %rax
movq %rax, -0x4c0(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4c0(%rbp), %rdi
callq 0xa23e
movq -0x4c0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x1203a(%rip), %rsi     # 0x171b5
callq 0x3300
movl %eax, %r15d
leaq -0x4b0(%rbp), %rax
cmpq %rax, %rbx
je 0x51a1
movq -0x4b0(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x58ab
leaq -0x490(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4a0(%rbp), %rdi
callq 0xa23e
movq -0x4a0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x12003(%rip), %rsi     # 0x171e3
callq 0x3300
movl %eax, %r15d
leaq -0x490(%rbp), %rax
cmpq %rax, %rbx
je 0x5206
movq -0x490(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x5a61
leaq -0x470(%rbp), %rax
movq %rax, -0x480(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x480(%rbp), %rdi
callq 0xa23e
movq -0x480(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11fce(%rip), %rsi     # 0x17213
callq 0x3300
movl %eax, %r15d
leaq -0x470(%rbp), %rax
cmpq %rax, %rbx
je 0x526b
movq -0x470(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x5c32
leaq -0x450(%rbp), %rax
movq %rax, -0x460(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x460(%rbp), %rdi
callq 0xa23e
movq -0x460(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11f9c(%rip), %rsi     # 0x17246
callq 0x3300
movl %eax, %r15d
leaq -0x450(%rbp), %rax
cmpq %rax, %rbx
je 0x52d0
movq -0x450(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x5df3
leaq -0x430(%rbp), %rax
movq %rax, -0x440(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x440(%rbp), %rdi
callq 0xa23e
movq -0x440(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11f6b(%rip), %rsi     # 0x1727a
callq 0x3300
movl %eax, %r15d
leaq -0x430(%rbp), %rax
cmpq %rax, %rbx
je 0x5335
movq -0x430(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x5f2a
leaq -0x410(%rbp), %rax
movq %rax, -0x420(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x420(%rbp), %rdi
callq 0xa23e
movq -0x420(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11f3b(%rip), %rsi     # 0x172af
callq 0x3300
movl %eax, %r15d
leaq -0x410(%rbp), %rax
cmpq %rax, %rbx
je 0x539a
movq -0x410(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x5fe0
leaq -0x3f0(%rbp), %rax
movq %rax, -0x400(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x400(%rbp), %rdi
callq 0xa23e
movq -0x400(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11eda(%rip), %rsi     # 0x172b3
callq 0x3300
movl %eax, %r15d
leaq -0x3f0(%rbp), %rax
cmpq %rax, %rbx
je 0x53ff
movq -0x3f0(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x609a
leaq -0x3d0(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x3e0(%rbp), %rdi
callq 0xa23e
movq -0x3e0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11eb3(%rip), %rsi     # 0x172f1
callq 0x3300
movl %eax, %r15d
leaq -0x3d0(%rbp), %rax
cmpq %rax, %rbx
je 0x5464
movq -0x3d0(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x6173
leaq -0x3b0(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x3c0(%rbp), %rdi
callq 0xa23e
movq -0x3c0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11e90(%rip), %rsi     # 0x17333
callq 0x3300
movl %eax, %r15d
leaq -0x3b0(%rbp), %rax
cmpq %rax, %rbx
je 0x54c9
movq -0x3b0(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
je 0x626c
leaq -0x390(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x3a0(%rbp), %rdi
callq 0xa23e
movq -0x3a0(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11e6a(%rip), %rsi     # 0x17372
callq 0x3300
movl %eax, %r15d
leaq -0x390(%rbp), %rax
cmpq %rax, %rbx
je 0x552e
movq -0x390(%rbp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x3220
testl %r15d, %r15d
jne 0x5dcc
movq -0x160(%rbp), %rax
cmpq %rax, -0x158(%rbp)
leaq -0x8f0(%rbp), %rbx
je 0x5555
movq %rax, -0x158(%rbp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x100(%rbp)
xorps %xmm0, %xmm0
leaq -0xf8(%rbp), %rcx
movups %xmm0, 0x10(%rcx)
movups %xmm0, (%rcx)
movq %rax, -0xd8(%rbp)
movups %xmm0, 0x38(%rcx)
movups %xmm0, 0x28(%rcx)
movq %rax, -0xb0(%rbp)
movups %xmm0, 0x60(%rcx)
movups %xmm0, 0x50(%rcx)
movq %rax, -0x88(%rbp)
leaq -0x160(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xa7cc
jmp 0x5dd3
leaq -0x370(%rbp), %r15
movq %r15, -0x380(%rbp)
leaq -0x380(%rbp), %r13
movq %r13, %rdi
leaq 0x11b89(%rip), %rsi     # 0x1715c
leaq 0x11baa(%rip), %rdx     # 0x17184
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x100(%rbp), %rdi
movq %r12, %rsi
movl $0xf, %edx
movq %r13, %rcx
callq 0x3944
movq -0x380(%rbp), %rdi
cmpq %r15, %rdi
je 0x5618
movq -0x370(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x100(%rbp), %xmm0
cvtss2sd -0xfc(%rbp), %xmm1
cvtss2sd -0xf8(%rbp), %xmm2
cvtss2sd -0xf4(%rbp), %xmm3
cvtss2sd -0xf0(%rbp), %xmm4
cvtss2sd -0xec(%rbp), %xmm5
cvtss2sd -0xe8(%rbp), %xmm6
cvtss2sd -0xe4(%rbp), %xmm7
cvtss2sd -0xe0(%rbp), %xmm8
cvtss2sd -0xdc(%rbp), %xmm9
cvtss2sd -0xd8(%rbp), %xmm10
cvtss2sd -0xd4(%rbp), %xmm11
cvtss2sd -0xd0(%rbp), %xmm12
cvtss2sd -0xcc(%rbp), %xmm13
cvtss2sd -0xc8(%rbp), %xmm14
movsd %xmm0, -0x5e8(%rbp)
movsd %xmm1, -0x5e0(%rbp)
movsd %xmm2, -0x5d8(%rbp)
movsd %xmm9, -0x5d0(%rbp)
movsd %xmm10, -0x5c8(%rbp)
movsd %xmm11, -0x5c0(%rbp)
movsd %xmm12, -0x5b8(%rbp)
movsd %xmm13, -0x5b0(%rbp)
movsd %xmm14, -0x5a8(%rbp)
movsd %xmm3, -0x5a0(%rbp)
movsd %xmm4, -0x598(%rbp)
movsd %xmm5, -0x590(%rbp)
movsd %xmm6, -0x588(%rbp)
movsd %xmm7, -0x580(%rbp)
movsd %xmm8, -0x578(%rbp)
movq -0x2d0(%rbp), %rax
movq %rax, -0x570(%rbp)
movl $0x118, %edi            # imm = 0x118
callq 0x3210
movq %rax, %r13
movq %rax, %rdi
leaq -0x5e8(%rbp), %rsi
leaq -0x520(%rbp), %rdx
movss -0x1a4(%rbp), %xmm0
movl -0x13c(%rbp), %ecx
movq -0x1b0(%rbp), %r8
callq 0x6e84
jmp 0x5dd3
leaq -0x2b8(%rbp), %rax
movq %rax, -0x2c8(%rbp)
leaq -0x2c8(%rbp), %r15
movq %r15, %rdi
leaq 0x11a09(%rip), %rsi     # 0x17189
leaq 0x11a2d(%rip), %rdx     # 0x171b4
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x100(%rbp), %rdi
movq %r12, %rsi
movl $0xd, %edx
movq %r15, %rcx
callq 0x3944
movq -0x2c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rax
cmpq %rax, %rdi
je 0x57cc
movq -0x2b8(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x100(%rbp), %xmm0
cvtss2sd -0xfc(%rbp), %xmm1
cvtss2sd -0xf8(%rbp), %xmm2
cvtss2sd -0xf4(%rbp), %xmm3
cvtss2sd -0xf0(%rbp), %xmm4
cvtss2sd -0xec(%rbp), %xmm5
cvtss2sd -0xe8(%rbp), %xmm6
cvtss2sd -0xe4(%rbp), %xmm7
cvtss2sd -0xe0(%rbp), %xmm8
cvtss2sd -0xd8(%rbp), %xmm9
cvtss2sd -0xd4(%rbp), %xmm10
movss -0xdc(%rbp), %xmm11
cvtss2sd -0xd0(%rbp), %xmm12
movsd %xmm0, -0x340(%rbp)
movsd %xmm1, -0x338(%rbp)
movsd %xmm2, -0x330(%rbp)
movsd %xmm3, -0x328(%rbp)
movsd %xmm4, -0x320(%rbp)
movsd %xmm5, -0x318(%rbp)
movsd %xmm6, -0x310(%rbp)
movsd %xmm7, -0x308(%rbp)
movsd %xmm8, -0x300(%rbp)
movsd %xmm9, -0x2f8(%rbp)
movsd %xmm10, -0x2f0(%rbp)
movsd %xmm12, -0x2e8(%rbp)
movss %xmm11, -0x2e0(%rbp)
jmp 0x5dd3
leaq -0x298(%rbp), %rax
movq %rax, -0x2a8(%rbp)
leaq -0x2a8(%rbp), %rbx
movq %rbx, %rdi
leaq 0x118ef(%rip), %rsi     # 0x171b9
leaq 0x11911(%rip), %rdx     # 0x171e2
callq 0xa4ce
leaq -0x70(%rbp), %rdi
movq %r12, %rsi
movl $0x4, %edx
movq %rbx, %rcx
callq 0x3944
movq -0x2a8(%rbp), %rdi
leaq -0x298(%rbp), %rax
cmpq %rax, %rdi
je 0x590c
movq -0x298(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x70(%rbp), %xmm0
movsd %xmm0, -0x138(%rbp)
xorps %xmm0, %xmm0
cvtss2sd -0x6c(%rbp), %xmm0
movsd %xmm0, -0x130(%rbp)
xorps %xmm0, %xmm0
cvtss2sd -0x68(%rbp), %xmm0
movsd %xmm0, -0x128(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x3b49
movl $0x210, %edi            # imm = 0x210
callq 0x3210
movq %rax, %rbx
movss -0x64(%rbp), %xmm0
movss %xmm0, -0x4c(%rbp)
movups -0x100(%rbp), %xmm0
movups -0xf0(%rbp), %xmm1
movups -0xe0(%rbp), %xmm2
movups -0xd0(%rbp), %xmm3
movups %xmm0, -0x6e8(%rbp)
movups %xmm1, -0x6d8(%rbp)
movups %xmm2, -0x6c8(%rbp)
movups %xmm3, -0x6b8(%rbp)
movups -0xc0(%rbp), %xmm0
movups %xmm0, -0x6a8(%rbp)
movups -0xb0(%rbp), %xmm0
movups %xmm0, -0x698(%rbp)
movups -0xa0(%rbp), %xmm0
movups %xmm0, -0x688(%rbp)
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x678(%rbp)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x670(%rbp)
movq %rax, %rdi
leaq -0x6e8(%rbp), %rsi
leaq -0x340(%rbp), %rdx
callq 0x7462
leaq 0x18306(%rip), %rax     # 0x1dd08
movq %rax, (%rbx)
movsd -0x138(%rbp), %xmm0
movsd %xmm0, 0x1f0(%rbx)
movsd -0x130(%rbp), %xmm0
movsd %xmm0, 0x1f8(%rbx)
movsd -0x128(%rbp), %xmm0
movsd %xmm0, 0x200(%rbx)
movss -0x4c(%rbp), %xmm0
movss %xmm0, 0x208(%rbx)
movq %rbx, -0x1c8(%rbp)
leaq -0x180(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0xa6b6
jmp 0x5dcc
leaq -0x278(%rbp), %rax
movq %rax, -0x288(%rbp)
leaq -0x288(%rbp), %rbx
movq %rbx, %rdi
leaq 0x11767(%rip), %rsi     # 0x171e7
leaq 0x1178b(%rip), %rdx     # 0x17212
callq 0xa4ce
leaq -0x70(%rbp), %rdi
movq %r12, %rsi
movl $0x9, %edx
movq %rbx, %rcx
callq 0x3944
movq -0x288(%rbp), %rdi
leaq -0x278(%rbp), %rax
cmpq %rax, %rdi
je 0x5ac2
movq -0x278(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x70(%rbp), %xmm0
cvtss2sd -0x6c(%rbp), %xmm1
cvtss2sd -0x68(%rbp), %xmm2
movsd %xmm0, -0x1c8(%rbp)
movsd %xmm1, -0x1c0(%rbp)
movsd %xmm2, -0x1b8(%rbp)
xorps %xmm0, %xmm0
cvtss2sd -0x64(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd -0x60(%rbp), %xmm1
xorps %xmm2, %xmm2
cvtss2sd -0x5c(%rbp), %xmm2
movsd %xmm0, -0x568(%rbp)
movsd %xmm1, -0x560(%rbp)
xorps %xmm0, %xmm0
cvtss2sd -0x58(%rbp), %xmm0
xorps %xmm1, %xmm1
cvtss2sd -0x54(%rbp), %xmm1
cvtss2sd -0x50(%rbp), %xmm3
movsd %xmm2, -0x558(%rbp)
movsd %xmm0, -0x550(%rbp)
movsd %xmm1, -0x548(%rbp)
movsd %xmm3, -0x540(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x3b49
movl $0x2b8, %edi            # imm = 0x2B8
callq 0x3210
movq %rax, %rbx
movsd -0x100(%rbp), %xmm0
movsd %xmm0, -0x668(%rbp)
movups -0xf8(%rbp), %xmm0
movups %xmm0, -0x660(%rbp)
movups -0xe8(%rbp), %xmm0
movups %xmm0, -0x650(%rbp)
movups -0xd8(%rbp), %xmm0
movups %xmm0, -0x640(%rbp)
movups -0xc8(%rbp), %xmm0
movups %xmm0, -0x630(%rbp)
movups -0xb8(%rbp), %xmm0
movups %xmm0, -0x620(%rbp)
movups -0xa8(%rbp), %xmm0
movups %xmm0, -0x610(%rbp)
movups -0x98(%rbp), %xmm0
movups %xmm0, -0x600(%rbp)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x5f0(%rbp)
movq %rax, %rdi
leaq -0x1c8(%rbp), %rsi
leaq -0x568(%rbp), %rdx
leaq -0x550(%rbp), %rcx
leaq -0x340(%rbp), %r8
leaq -0x668(%rbp), %r9
callq 0x6cf2
movq %rbx, -0x2d8(%rbp)
leaq -0x180(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0xa6b6
jmp 0x5dcc
leaq -0xf0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq $0x0, -0xf8(%rbp)
movb $0x0, -0xf0(%rbp)
xorl %r15d, %r15d
xorl %ebx, %ebx
movq %r12, %rdi
leaq -0x100(%rbp), %rsi
callq 0x32c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x5c9f
movq -0x100(%rbp), %rdi
cmpq $0x6, %r15
jne 0x5c8a
callq 0x33b0
movl %eax, %ebx
jmp 0x5c9a
callq 0x32a0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x70(%rbp,%r15,4)
incq %r15
jmp 0x5c57
addl $-0x8, %r15d
cmpl $-0x3, %r15d
ja 0x5cf3
movl $0x2e, %edx
movq 0x1833b(%rip), %rdi     # 0x1dff0
leaq 0x1155b(%rip), %rsi     # 0x17217
callq 0x3260
movq 0x18328(%rip), %rcx     # 0x1dff0
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x31e0
movsbl %al, %esi
movq 0x1830a(%rip), %rdi     # 0x1dff0
callq 0x3040
movq %rax, %rdi
callq 0x3160
movss -0x64(%rbp), %xmm0
movss %xmm0, -0x138(%rbp)
movss -0x60(%rbp), %xmm0
movss %xmm0, -0x130(%rbp)
movss -0x5c(%rbp), %xmm0
movss %xmm0, -0x128(%rbp)
movss -0x70(%rbp), %xmm0
movss %xmm0, -0x4c(%rbp)
movss -0x6c(%rbp), %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x68(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movl $0x38, %edi
callq 0x3210
xorps %xmm0, %xmm0
cvtss2sd -0x74(%rbp), %xmm0
cvtss2sd -0x78(%rbp), %xmm1
cvtss2sd -0x4c(%rbp), %xmm2
cvtss2sd -0x128(%rbp), %xmm3
cvtss2sd -0x130(%rbp), %xmm4
cvtss2sd -0x138(%rbp), %xmm5
movsd %xmm5, (%rax)
movsd %xmm4, 0x8(%rax)
movsd %xmm3, 0x10(%rax)
movsd %xmm2, 0x18(%rax)
movsd %xmm1, 0x20(%rax)
movsd %xmm0, 0x28(%rax)
movl %ebx, 0x30(%rax)
movb $0x1, 0x34(%rax)
movq %rax, -0x1c8(%rbp)
leaq -0x1a0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0xaae0
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x5dcc
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x3220
leaq -0x8f0(%rbp), %rbx
movq %r12, %rdi
movq 0x181eb(%rip), %rsi     # 0x1dfc8
callq 0x3320
leaq -0x9f8(%rbp), %rdi
callq 0x30d0
jmp 0x5012
leaq -0x258(%rbp), %rax
movq %rax, -0x268(%rbp)
leaq -0x268(%rbp), %r15
movq %r15, %rdi
leaq 0x11438(%rip), %rsi     # 0x1724a
leaq 0x11460(%rip), %rdx     # 0x17279
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x100(%rbp), %rdi
movq %r12, %rsi
movl $0x6, %edx
movq %r15, %rcx
callq 0x3944
movq -0x268(%rbp), %rdi
leaq -0x258(%rbp), %rax
cmpq %rax, %rdi
je 0x5e5e
movq -0x258(%rbp), %rsi
incq %rsi
callq 0x3220
movss -0xf4(%rbp), %xmm0
movss %xmm0, -0x138(%rbp)
movss -0xf0(%rbp), %xmm0
movss %xmm0, -0x130(%rbp)
movss -0xec(%rbp), %xmm0
movss %xmm0, -0x128(%rbp)
movss -0x100(%rbp), %xmm0
movss %xmm0, -0x4c(%rbp)
movss -0xfc(%rbp), %xmm0
movss %xmm0, -0x78(%rbp)
movss -0xf8(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movl $0x38, %edi
callq 0x3210
xorps %xmm0, %xmm0
cvtss2sd -0x74(%rbp), %xmm0
cvtss2sd -0x78(%rbp), %xmm1
cvtss2sd -0x4c(%rbp), %xmm2
cvtss2sd -0x128(%rbp), %xmm3
cvtss2sd -0x130(%rbp), %xmm4
cvtss2sd -0x138(%rbp), %xmm5
movsd %xmm5, (%rax)
movsd %xmm4, 0x8(%rax)
movsd %xmm3, 0x10(%rax)
movsd %xmm2, 0x18(%rax)
movsd %xmm1, 0x20(%rax)
movsd %xmm0, 0x28(%rax)
movl $0x0, 0x30(%rax)
movb $0x0, 0x34(%rax)
movq %rax, -0x70(%rbp)
leaq -0x1a0(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0xaae0
jmp 0x5dd3
leaq -0x238(%rbp), %rax
movq %rax, -0x248(%rbp)
leaq -0x248(%rbp), %r15
movq %r15, %rdi
leaq 0x11335(%rip), %rsi     # 0x1727e
leaq 0x1135e(%rip), %rdx     # 0x172ae
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x100(%rbp), %rdi
movq %r12, %rsi
movl $0x3, %edx
movq %r15, %rcx
callq 0x3944
movq -0x248(%rbp), %rdi
leaq -0x238(%rbp), %rax
cmpq %rax, %rdi
je 0x5f95
movq -0x238(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x100(%rbp), %xmm0
cvtss2sd -0xfc(%rbp), %xmm1
cvtss2sd -0xf8(%rbp), %xmm2
movsd %xmm0, 0xd0(%r13)
movsd %xmm1, 0xd8(%r13)
movsd %xmm2, 0xe0(%r13)
xorps %xmm0, %xmm0
movups %xmm0, 0xe8(%r13)
movups %xmm0, 0xf5(%r13)
jmp 0x5dd3
leaq -0xf0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq $0x0, -0xf8(%rbp)
movb $0x0, -0xf0(%rbp)
movq %r12, %rdi
leaq -0x100(%rbp), %rsi
callq 0x32c0
leaq -0x8f0(%rbp), %rbx
movq -0x100(%rbp), %rsi
leaq -0x360(%rbp), %r15
movq %r15, %rdi
leaq -0x70(%rbp), %rdx
callq 0x6ae6
movq %r15, %rdi
leaq -0x180(%rbp), %rsi
leaq -0x160(%rbp), %rdx
leaq -0x340(%rbp), %rcx
callq 0x4226
movq -0x360(%rbp), %rdi
leaq -0x350(%rbp), %rax
cmpq %rax, %rdi
je 0x606f
movq -0x350(%rbp), %rsi
incq %rsi
callq 0x3220
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x5dd3
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x3220
jmp 0x5dd3
leaq -0x218(%rbp), %rax
movq %rax, -0x228(%rbp)
leaq -0x228(%rbp), %r15
movq %r15, %rdi
leaq 0x111fe(%rip), %rsi     # 0x172b7
leaq 0x11230(%rip), %rdx     # 0x172f0
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x70(%rbp), %rdi
movq %r12, %rsi
movl $0x3, %edx
movq %r15, %rcx
callq 0x3944
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0x6102
movq -0x218(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x70(%rbp), %xmm0
cvtss2sd -0x6c(%rbp), %xmm1
cvtss2sd -0x68(%rbp), %xmm2
movsd %xmm0, -0x100(%rbp)
xorps %xmm0, %xmm0
leaq -0xf8(%rbp), %rax
movups %xmm0, 0x10(%rax)
movups %xmm0, (%rax)
movsd %xmm1, -0xd8(%rbp)
movups %xmm0, 0x38(%rax)
movups %xmm0, 0x28(%rax)
movsd %xmm2, -0xb0(%rbp)
movups %xmm0, 0x60(%rax)
movups %xmm0, 0x50(%rax)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x88(%rbp)
leaq -0x160(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xa7cc
jmp 0x5dd3
leaq -0x1f8(%rbp), %rax
movq %rax, -0x208(%rbp)
leaq -0x208(%rbp), %r15
movq %r15, %rdi
leaq 0x11163(%rip), %rsi     # 0x172f5
leaq 0x11199(%rip), %rdx     # 0x17332
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x70(%rbp), %rdi
movq %r12, %rsi
movl $0x3, %edx
movq %r15, %rcx
callq 0x3944
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0x61db
movq -0x1f8(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x70(%rbp), %xmm0
cvtss2sd -0x6c(%rbp), %xmm1
cvtss2sd -0x68(%rbp), %xmm2
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x100(%rbp)
xorps %xmm3, %xmm3
leaq -0xf8(%rbp), %rcx
movups %xmm3, (%rcx)
movsd %xmm0, -0xe8(%rbp)
movl $0x0, %edx
movq %rdx, -0xe0(%rbp)
movq %rax, -0xd8(%rbp)
movq %rdx, -0xd0(%rbp)
movsd %xmm1, -0xc8(%rbp)
movups %xmm3, 0x38(%rcx)
movq %rax, -0xb0(%rbp)
movsd %xmm2, -0xa8(%rbp)
movq %rdx, 0x68(%rcx)
movups %xmm3, 0x58(%rcx)
movq %rax, -0x88(%rbp)
leaq -0x160(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xa7cc
jmp 0x5dd3
leaq -0x1d8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
leaq -0x1e8(%rbp), %r15
movq %r15, %rdi
leaq 0x110ac(%rip), %rsi     # 0x17337
leaq 0x110df(%rip), %rdx     # 0x17371
callq 0xa4ce
leaq -0x8f0(%rbp), %rbx
leaq -0x70(%rbp), %rdi
movq %r12, %rsi
movl $0x3, %edx
movq %r15, %rcx
callq 0x3944
movq -0x1e8(%rbp), %rdi
leaq -0x1d8(%rbp), %rax
cmpq %rax, %rdi
je 0x62d4
movq -0x1d8(%rbp), %rsi
incq %rsi
callq 0x3220
cvtss2sd -0x70(%rbp), %xmm1
cvtss2sd -0x6c(%rbp), %xmm2
cvtss2sd -0x68(%rbp), %xmm0
movsd %xmm1, -0x538(%rbp)
movsd %xmm2, -0x530(%rbp)
movsd %xmm0, -0x528(%rbp)
mulsd %xmm2, %xmm2
mulsd %xmm1, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
ucomisd 0x10d01(%rip), %xmm0    # 0x17018
jb 0x631f
sqrtsd %xmm0, %xmm0
jmp 0x6324
callq 0x31a0
leaq -0x100(%rbp), %r15
cvtsd2ss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
movq %r15, %rdi
leaq -0x538(%rbp), %rsi
callq 0x6ff2
leaq -0x160(%rbp), %rdi
movq %r15, %rsi
callq 0xa7cc
jmp 0x5dd3
movq -0x180(%rbp), %rax
cmpq %rax, -0x178(%rbp)
je 0x6391
xorl %ebx, %ebx
movq (%rax,%rbx,8), %rsi
movq %r13, %rdi
callq 0x71c2
incq %rbx
movq -0x180(%rbp), %rax
movq -0x178(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbx, %rcx
ja 0x6368
movq -0x1a0(%rbp), %rax
cmpq %rax, -0x198(%rbp)
je 0x63cc
xorl %ebx, %ebx
movq (%rax,%rbx,8), %rsi
movq %r13, %rdi
callq 0x7204
incq %rbx
movq -0x1a0(%rbp), %rax
movq -0x198(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbx, %rcx
ja 0x63a3
leaq -0x8f0(%rbp), %rdi
callq 0x3070
leaq -0x8f0(%rbp), %rdi
callq 0x30b0
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x6406
movq -0x110(%rbp), %rsi
incq %rsi
callq 0x3220
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x641f
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3220
movq -0x160(%rbp), %rdi
testq %rdi, %rdi
je 0x643a
movq -0x150(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq -0x1a0(%rbp), %rdi
testq %rdi, %rdi
je 0x6455
movq -0x190(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x6470
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq -0x518(%rbp), %rdi
testq %rdi, %rdi
je 0x648b
movq -0x508(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq %r13, %rax
addq $0xa48, %rsp            # imm = 0xA48
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x17b49(%rip), %rdi     # 0x1dff0
leaq 0x10ec8(%rip), %rsi     # 0x17376
movl $0x14, %edx
callq 0x3260
movq 0x17b31(%rip), %rdi     # 0x1dff0
callq 0x3110
xorl %edi, %edi
callq 0x3290
jmp 0x6710
movq %rax, %r14
movq -0x1e8(%rbp), %rdi
leaq -0x1d8(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x1d8(%rbp), %rsi
jmp 0x66f6
jmp 0x6710
jmp 0x6710
jmp 0x6710
movq %rax, %r14
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x1f8(%rbp), %rsi
jmp 0x66f6
jmp 0x6710
jmp 0x6710
jmp 0x6710
movq %rax, %r14
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x218(%rbp), %rsi
jmp 0x66f6
jmp 0x66d9
movq %rax, %r14
movq -0x360(%rbp), %rdi
leaq -0x350(%rbp), %rax
cmpq %rax, %rdi
je 0x66dc
movq -0x350(%rbp), %rsi
incq %rsi
callq 0x3220
jmp 0x66dc
jmp 0x66d9
jmp 0x6710
movq %rax, %r14
movq -0x248(%rbp), %rdi
leaq -0x238(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x238(%rbp), %rsi
jmp 0x66f6
jmp 0x6710
movq %rax, %r14
movq -0x268(%rbp), %rdi
leaq -0x258(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x258(%rbp), %rsi
jmp 0x66f6
movq %rax, %r14
jmp 0x6749
movq %rax, %r14
jmp 0x6779
jmp 0x6710
jmp 0x6700
movq %rax, %r14
movl $0x2b8, %esi            # imm = 0x2B8
jmp 0x6675
movq %rax, %r14
movq -0x288(%rbp), %rdi
leaq -0x278(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x278(%rbp), %rsi
jmp 0x66f6
jmp 0x6710
jmp 0x66d9
jmp 0x66d9
movq %rax, %r14
movq -0x2a8(%rbp), %rdi
leaq -0x298(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x298(%rbp), %rsi
jmp 0x66f6
movq %rax, %r14
movl $0x210, %esi            # imm = 0x210
movq %rbx, %rdi
jmp 0x66f9
jmp 0x6710
jmp 0x6710
jmp 0x6710
movq %rax, %r14
movq -0x2c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0x2b8(%rbp), %rsi
jmp 0x66f6
jmp 0x6710
movq %rax, %r14
movl $0x118, %esi            # imm = 0x118
movq %r13, %rdi
jmp 0x66f9
jmp 0x6710
jmp 0x6710
movq %rax, %r14
movq -0x380(%rbp), %rdi
cmpq %r15, %rdi
je 0x6713
movq -0x370(%rbp), %rsi
jmp 0x66f6
jmp 0x6700
jmp 0x6700
jmp 0x6700
movq %rax, %r14
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x6713
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x3220
jmp 0x6713
movq %rax, %r14
leaq -0x38(%rbp), %r15
leaq -0x110(%rbp), %r12
jmp 0x673d
movq %rax, %r14
leaq -0x38(%rbp), %r15
leaq -0x110(%rbp), %r12
movq 0x178a3(%rip), %rsi     # 0x1dfc8
leaq -0xa70(%rbp), %rdi
callq 0x3320
leaq -0x9f8(%rbp), %rdi
callq 0x30d0
leaq -0x8f0(%rbp), %rdi
callq 0x30b0
movq -0x120(%rbp), %rdi
cmpq %r12, %rdi
je 0x6764
movq -0x110(%rbp), %rsi
incq %rsi
callq 0x3220
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
je 0x6779
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x3220
movq -0x160(%rbp), %rdi
testq %rdi, %rdi
je 0x6794
movq -0x150(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq -0x1a0(%rbp), %rdi
testq %rdi, %rdi
je 0x67af
movq -0x190(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x67ca
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq -0x518(%rbp), %rdi
testq %rdi, %rdi
je 0x67e5
movq -0x508(%rbp), %rsi
subq %rdi, %rsi
callq 0x3220
movq %r14, %rdi
callq 0x3450