// File: /workspace/github_cpp_makefile_star2_O2/tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelScene.cpp
// Function: gaps::R3SurfelScene::WriteAsciiStream(_IO_FILE*)
int R3SurfelScene::
WriteAsciiStream(FILE *fp)
{
  // Write header
  fprintf(fp, "SSA 1.1\n");

  // Write scene header
  WriteAsciiString(fp, name);
  fprintf(fp, " %d %d %d %d %d %d %d %d %d %d %d %d", 
    tree->NNodes(), NObjects(), NLabels(), NFeatures(),
    NObjectRelationships(), NLabelRelationships(), 
    NLabelAssignments(), NScans(), 
    NObjectProperties(), NLabelProperties(),
    NImages(), NComments());
  for (int j = 0; j < 3; j++) fprintf(fp, " 0");
  fprintf(fp, "\n");

  // Write transformation
  fprintf(fp, "T");
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      fprintf(fp, " %g", Transformation().Matrix()[i][j]);
    }
  }
  fprintf(fp, "\n");

  // Write comments
  for (int i = 0; i < NComments(); i++) {
    fprintf(fp, "C ");
    WriteAsciiString(fp, Comment(i));
    fprintf(fp, "\n");
  }

  // Write nodes
  for (int i = 0; i < tree->NNodes(); i++) {
    R3SurfelNode *node = tree->Node(i);
    int parent_index = (node->Parent()) ? node->Parent()->TreeIndex() : -1;
    fprintf(fp, "N ");
    WriteAsciiString(fp, node->Name());
    fprintf(fp, " %d %d %d %d %g %g", parent_index, node->NParts(), node->NBlocks(), 0, node->Complexity(), node->Resolution());
    for (int j = 0; j < 8; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
    for (int j = 0; j < node->NBlocks(); j++) {
      R3SurfelBlock *block = node->Block(j);
      fprintf(fp, "%d ", block->DatabaseIndex());
    }
    fprintf(fp, "\n");
  }

  // Write objects
  for (int i = 0; i < NObjects(); i++) {
    R3SurfelObject *object = Object(i);
    int parent_index = (object->Parent()) ? object->Parent()->SceneIndex() : -1;
    // const R3SurfelFeatureVector& feature_vector = object->FeatureVector();
    const R3SurfelFeatureVector& feature_vector = object->feature_vector;
    fprintf(fp, "O ");
    WriteAsciiString(fp, object->Name());
    fprintf(fp, " %d %d %d %d %d %g %u", object->Identifier(), parent_index, object->NParts(), object->NNodes(), 
            feature_vector.NValues(), object->Complexity(), (unsigned int) object->Flags());
    for (int j = 0; j < 7; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
    for (int j = 0; j < feature_vector.NValues(); j++) {
      fprintf(fp, "%g ", feature_vector.Value(j));
    }
    fprintf(fp, "\n");
    for (int j = 0; j < object->NNodes(); j++) {
      R3SurfelNode *node = object->Node(j);
      fprintf(fp, "%d ", node->TreeIndex());
    }
    fprintf(fp, "\n");
  }

  // Write labels
  for (int i = 0; i < NLabels(); i++) {
    R3SurfelLabel *label = Label(i);
    int dummy = 0;
    const RNRgb& color = label->Color();
    int parent_index = (label->Parent()) ? label->Parent()->SceneIndex() : -1;
    fprintf(fp, "L ");
    WriteAsciiString(fp, label->Name());
    fprintf(fp, " %d %d %d %d %d %g %g %g %u", label->Identifier(), label->AssignmentKeystroke(), 
      dummy, parent_index, label->NParts(), color.R(), color.G(), color.B(),
      (unsigned int) label->Flags());
    for (int j = 0; j < 3; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
  }

  // Write features
  for (int i = 0; i < NFeatures(); i++) {
    R3SurfelFeature *feature = Feature(i);
    fprintf(fp, "F ");
    WriteAsciiString(fp, feature->Name());
    fprintf(fp, " %g %g %g %d %d", feature->Minimum(), feature->Maximum(), feature->Weight(), feature->Type(), 1);
    for (int j = 0; j < 1; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
    if (feature->Type() == R3_SURFEL_OVERHEAD_GRID_FEATURE_TYPE) {
      const char *filename = ((R3SurfelOverheadGridFeature *) feature)->filename;
      fprintf(fp, "%s\n", (filename) ? filename : "None");
    }
  }

  // Write object relationships
  for (int i = 0; i < NObjectRelationships(); i++) {
    R3SurfelObjectRelationship *relationship = ObjectRelationship(i);
    fprintf(fp, "OR %d %d %d", relationship->Type(), relationship->NObjects(), relationship->NOperands());
    for (int j = 0; j < 4; j++) fprintf(fp, " 0");
    for (int j = 0; j < relationship->NObjects(); j++) fprintf(fp, " %d", relationship->Object(j)->SceneIndex());
    fprintf(fp, "\n");
    for (int j = 0; j < relationship->NOperands(); j++) fprintf(fp, " %g", relationship->Operand(j));
    fprintf(fp, "\n");
    fprintf(fp, "\n");
  }

  // Write label relationships
  for (int i = 0; i < NLabelRelationships(); i++) {
    R3SurfelLabelRelationship *relationship = LabelRelationship(i);
    fprintf(fp, "LR %d %d %d", relationship->Type(), relationship->NLabels(), relationship->NOperands());
    for (int j = 0; j < 4; j++) fprintf(fp, " 0");
    for (int j = 0; j < relationship->NLabels(); j++) fprintf(fp, " %d", relationship->Label(j)->SceneIndex());
    fprintf(fp, "\n");
    for (int j = 0; j < relationship->NOperands(); j++) fprintf(fp, " %g", relationship->Operand(j));
    fprintf(fp, "\n");
    fprintf(fp, "\n");
  }

  // Write assignments
  for (int i = 0; i < NLabelAssignments(); i++) {
    R3SurfelLabelAssignment *assignment = LabelAssignment(i);
    R3SurfelObject *object = assignment->Object();
    R3SurfelLabel *label = assignment->Label();
    fprintf(fp, "A %d %d %g %d", object->SceneIndex(), label->SceneIndex(), assignment->Confidence(), assignment->Originator());
    for (int j = 0; j < 4; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
  }

  // Write scans
  for (int i = 0; i < NScans(); i++) {
    R3SurfelScan *scan = Scan(i);
    R3Point viewpoint = scan->Viewpoint();
    R3Vector towards = scan->Towards();
    R3Vector up = scan->Up();
    fprintf(fp, "S ");
    WriteAsciiString(fp, scan->Name());
    fprintf(fp, " %g %g %g", viewpoint.X(), viewpoint.Y(), viewpoint.Z());
    fprintf(fp, " %g %g %g", towards.X(), towards.Y(), towards.Z());
    fprintf(fp, " %g %g %g", up.X(), up.Y(), up.Z());
    fprintf(fp, " %.6f %d", scan->Timestamp(), (scan->Node()) ? scan->Node()->TreeIndex() : -1);
    fprintf(fp, " %d %d ", scan->ImageWidth(), scan->ImageHeight());
    fprintf(fp, " %g %g %g ", scan->XFocal(), scan->ImageCenter().X(), scan->ImageCenter().Y());
    fprintf(fp, " %u ", (unsigned int) scan->Flags());
    fprintf(fp, " %g ", scan->YFocal());
    for (int j = 0; j < 1; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
  }

  // Write images
  for (int i = 0; i < NImages(); i++) {
    R3SurfelImage *image = Image(i);
    R3Point viewpoint = image->Viewpoint();
    R3Vector towards = image->Towards();
    R3Vector up = image->Up();
    fprintf(fp, "I ");
    WriteAsciiString(fp, image->Name());
    fprintf(fp, " %g %g %g", viewpoint.X(), viewpoint.Y(), viewpoint.Z());
    fprintf(fp, " %g %g %g", towards.X(), towards.Y(), towards.Z());
    fprintf(fp, " %g %g %g", up.X(), up.Y(), up.Z());
    fprintf(fp, " %.6f", image->Timestamp());
    fprintf(fp, " %d ", (image->Scan()) ? image->Scan()->SceneIndex() : -1);
    fprintf(fp, " %d %d ", image->ImageWidth(), image->ImageHeight());
    fprintf(fp, " %g %g ", image->XFocal(), image->YFocal());
    fprintf(fp, " %g %g ", image->ImageCenter().X(), image->ImageCenter().Y());
    fprintf(fp, " %u ", (unsigned int) image->Flags());
    fprintf(fp, " %d ", image->DistortionType());
    fprintf(fp, " %d ", (image->HasRollingShutter()) ? 1 : 0);
    for (int j = 0; j < 2; j++) fprintf(fp, "0 ");

    // Write extra image parameters
    if (image->DistortionType() != R3_SURFEL_NO_DISTORTION) {
      const RNScalar *radial_distortion = image->RadialDistortion();
      const RNScalar *tangential_distortion = image->TangentialDistortion();
      fprintf(fp, "%g %g %g ", radial_distortion[0], radial_distortion[1], radial_distortion[2]);
      fprintf(fp, "%g %g ", tangential_distortion[0], tangential_distortion[1]);
    }
    if (image->HasRollingShutter()) {
      const R3CoordSystem *rs_poses = image->RollingShutterPoses();
      const RNScalar *rs_timestamps = image->RollingShutterTimestamps();
      R4Matrix camera_to_world0 = rs_poses[0].Matrix();
      R4Matrix camera_to_world1 = rs_poses[1].Matrix();
      R3Point viewpoint0 = camera_to_world0 * R3zero_point;
      R3Point viewpoint1 = camera_to_world1 * R3zero_point;
      R3Vector towards0 = camera_to_world0 * R3negz_vector;
      R3Vector towards1 = camera_to_world1 * R3negz_vector;
      R3Vector up0 = camera_to_world0 * R3posy_vector;
      R3Vector up1 = camera_to_world1 * R3posy_vector;
      fprintf(fp, " %g %g %g ", viewpoint0.X(), viewpoint0.Y(), viewpoint0.Z());
      fprintf(fp, " %g %g %g ", towards0.X(), towards0.Y(), towards0.Z());
      fprintf(fp, " %g %g %g ", up0.X(), up0.Y(), up0.Z());
      fprintf(fp, " %g %g %g ", viewpoint1.X(), viewpoint1.Y(), viewpoint1.Z());
      fprintf(fp, " %g %g %g ", towards1.X(), towards1.Y(), towards1.Z());
      fprintf(fp, " %g %g %g ", up1.X(), up1.Y(), up1.Z());
      fprintf(fp, " %.9f %.9f ", rs_timestamps[0], rs_timestamps[1]);
    }
    fprintf(fp, "\n");
  }

  // Write object properties
  for (int i = 0; i < NObjectProperties(); i++) {
    R3SurfelObjectProperty *property = ObjectProperty(i);
    fprintf(fp, "OP %d %d %d", property->Type(), property->Object()->SceneIndex(), property->NOperands());
    for (int j = 0; j < 4; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
    for (int j = 0; j < property->NOperands(); j++) fprintf(fp, " %g", property->Operand(j));
    fprintf(fp, "\n");
    fprintf(fp, "\n");
  }

  // Write label properties
  for (int i = 0; i < NLabelProperties(); i++) {
    R3SurfelLabelProperty *property = LabelProperty(i);
    fprintf(fp, "LP %d %d %d", property->Type(), property->Label()->SceneIndex(), property->NOperands());
    for (int j = 0; j < 4; j++) fprintf(fp, " 0");
    fprintf(fp, "\n");
    for (int j = 0; j < property->NOperands(); j++) fprintf(fp, " %g", property->Operand(j));
    fprintf(fp, "\n");
    fprintf(fp, "\n");
  }

  // Mark scene as clean
  flags.Remove(R3_SURFEL_SCENE_DIRTY_FLAG);

  // Return success
  return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x208, %rsp            # imm = 0x208
movq %rsi, %r14
movq %rdi, %r15
leaq 0xac2ed(%rip), %rdi     # 0xc87d1
pushq $0x8
popq %rsi
pushq $0x1
popq %rbx
movq %rbx, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0x1d0(%r15), %rsi
movq %r14, %rdi
callq 0x1d4bf
movq 0x8(%r15), %rax
movl 0x24(%rax), %edx
movl 0x1c(%r15), %ecx
movl 0x2c(%r15), %r8d
movl 0xac(%r15), %r9d
movl 0x5c(%r15), %eax
movq %rax, 0x8(%rsp)
movl 0x6c(%r15), %eax
movq %rax, 0x20(%rsp)
movl 0x7c(%r15), %eax
movq %rax, 0x18(%rsp)
movl 0x8c(%r15), %r12d
movl 0x3c(%r15), %r13d
movl 0x4c(%r15), %ebp
movl 0x9c(%r15), %r10d
movq %r15, 0x10(%rsp)
movl 0x1e4(%r15), %r11d
leaq 0xac27c(%rip), %rsi     # 0xc87da
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r10
pushq %rbp
pushq %r13
pushq %r12
pushq 0x40(%rsp)
pushq 0x50(%rsp)
pushq 0x40(%rsp)
callq 0x13780
addq $0x40, %rsp
pushq $0x3
popq %rbp
leaq 0xb7e1b(%rip), %r15     # 0xd43a6
pushq $0x2
popq %r12
subl $0x1, %ebp
jb 0x1c5a7
movq %r15, %rdi
movq %r12, %rsi
movq %rbx, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1c58f
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
pushq $0x54
popq %rdi
movq %r14, %rsi
callq 0x13690
movq 0x10(%rsp), %rbp
leaq 0xb8(%rbp), %r15
xorl %r12d, %r12d
leaq 0xac241(%rip), %rbx     # 0xc8814
cmpq $0x4, %r12
je 0x1c603
xorl %r13d, %r13d
cmpq $0x4, %r13
je 0x1c5fa
movsd (%r15,%r13,8), %xmm0
movq %r14, %rdi
movq %rbx, %rsi
movb $0x1, %al
callq 0x13780
incq %r13
jmp 0x1c5dc
incq %r12
addq $0x20, %r15
jmp 0x1c5d3
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
movq %rbp, %rbx
xorl %ebp, %ebp
leaq 0xac1e5(%rip), %r15     # 0xc87ff
pushq $0x2
popq %r12
pushq $0x1
popq %r13
movslq 0x1e4(%rbx), %rax
cmpq %rax, %rbp
jge 0x1c662
movq %r15, %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0x1d8(%rbx), %rax
movq (%rax,%rbp,8), %rsi
movq %r14, %rdi
callq 0x1d4bf
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
incq %rbp
jmp 0x1c622
pushq $0x1
popq %r12
leaq 0xac236(%rip), %rbx     # 0xc88a3
leaq 0xb7d32(%rip), %r13     # 0xd43a6
xorl %esi, %esi
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rax
movslq 0x24(%rax), %rcx
cmpq %rcx, %rsi
jge 0x1c787
movq 0x18(%rax), %rax
movq %rsi, 0x8(%rsp)
movq (%rax,%rsi,8), %rbp
movq 0x28(%rbp), %rax
pushq $-0x1
popq %r15
testq %rax, %rax
je 0x1c6aa
movl 0x20(%rax), %r15d
leaq 0xac151(%rip), %rdi     # 0xc8802
pushq $0x2
popq %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0xb8(%rbp), %rsi
movq %r14, %rdi
callq 0x1d4bf
movl 0x3c(%rbp), %eax
movl %eax, 0x20(%rsp)
movl 0x4c(%rbp), %eax
movl %eax, 0x18(%rsp)
movq %rbp, %rdi
callq 0x3365c
movsd %xmm0, 0x40(%rsp)
movq %rbp, %rdi
callq 0x33680
movaps %xmm0, %xmm1
movq %r14, %rdi
leaq 0xac106(%rip), %rsi     # 0xc8805
movl %r15d, %edx
movl 0x20(%rsp), %ecx
movl 0x18(%rsp), %r8d
xorl %r9d, %r9d
movsd 0x40(%rsp), %xmm0
movb $0x2, %al
callq 0x13780
pushq $0x8
popq %r15
subl $0x1, %r15d
jb 0x1c738
movq %r13, %rdi
pushq $0x2
popq %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1c71f
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %r15d, %r15d
movslq 0x4c(%rbp), %rax
cmpq %rax, %r15
jge 0x1c76f
movq 0x40(%rbp), %rax
movq (%rax,%r15,8), %rax
movl 0xa0(%rax), %edx
movq %r14, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x13780
incq %r15
jmp 0x1c746
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rsi
incq %rsi
jmp 0x1c676
pushq $0x1
popq %r13
leaq 0xac111(%rip), %r15     # 0xc88a3
leaq 0xb7c0d(%rip), %rbx     # 0xd43a6
xorl %ecx, %ecx
movslq 0x1c(%rdx), %rax
cmpq %rax, %rcx
jge 0x1c8da
movq 0x10(%rdx), %rax
movq %rcx, 0x8(%rsp)
movq (%rax,%rcx,8), %r12
movq 0x18(%r12), %rax
pushq $-0x1
popq %rbp
testq %rax, %rax
je 0x1c7c5
movl 0x10(%rax), %ebp
leaq 0xac04c(%rip), %rdi     # 0xc8818
pushq $0x2
popq %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0x88(%r12), %rsi
movq %r14, %rdi
callq 0x1d4bf
movq %r12, %rdi
callq 0x1683e
movl 0x2c(%r12), %r8d
movl 0x6c(%r12), %r9d
movl 0x80(%r12), %r10d
movsd 0x98(%r12), %xmm0
movl 0xe8(%r12), %r11d
movq %r14, %rdi
leaq 0xabffb(%rip), %rsi     # 0xc881b
movl %eax, %edx
movl %ebp, %ecx
movb $0x1, %al
pushq %r11
pushq %r10
callq 0x13780
addq $0x10, %rsp
pushq $0x7
popq %rbp
subl $0x1, %ebp
jb 0x1c84e
movq %rbx, %rdi
pushq $0x2
popq %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1c836
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %ebp, %ebp
movslq 0x80(%r12), %rax
cmpq %rax, %rbp
jge 0x1c888
movq 0x78(%r12), %rax
movsd (%rax,%rbp,8), %xmm0
movq %r14, %rdi
leaq 0xac032(%rip), %rsi     # 0xc88ae
movb $0x1, %al
callq 0x13780
incq %rbp
jmp 0x1c85b
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %ebp, %ebp
movslq 0x6c(%r12), %rax
cmpq %rax, %rbp
jge 0x1c8bd
movq 0x60(%r12), %rax
movq (%rax,%rbp,8), %rax
movl 0x20(%rax), %edx
movq %r14, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x13780
incq %rbp
jmp 0x1c895
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rcx
incq %rcx
movq 0x10(%rsp), %rdx
jmp 0x1c79b
xorl %ecx, %ecx
pushq $0x2
popq %r15
pushq $0x1
popq %r12
leaq 0xb7abb(%rip), %rbx     # 0xd43a6
movslq 0x2c(%rdx), %rax
cmpq %rax, %rcx
jge 0x1c9b8
movq 0x20(%rdx), %rax
movq %rcx, 0x8(%rsp)
movq (%rax,%rcx,8), %rbp
movq 0x18(%rbp), %rax
pushq $-0x1
popq %r13
testq %rax, %rax
je 0x1c916
movl 0x10(%rax), %r13d
leaq 0xabf14(%rip), %rdi     # 0xc8831
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0x60(%rbp), %rsi
movq %r14, %rdi
callq 0x1d4bf
movq %rbp, %rdi
callq 0x3b59e
movl 0x2c(%rbp), %r10d
movl 0x6c(%rbp), %ecx
movsd 0x70(%rbp), %xmm0
movsd 0x78(%rbp), %xmm1
movsd 0x80(%rbp), %xmm2
movl 0x88(%rbp), %r11d
movq %r14, %rdi
leaq 0xabecb(%rip), %rsi     # 0xc8834
movl %eax, %edx
xorl %r8d, %r8d
movl %r13d, %r9d
movb $0x3, %al
pushq %r11
pushq %r10
callq 0x13780
addq $0x10, %rsp
pushq $0x3
popq %rbp
subl $0x1, %ebp
jb 0x1c99b
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1c983
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rcx
incq %rcx
movq 0x10(%rsp), %rdx
jmp 0x1c8eb
pushq $0x2
popq %r15
pushq $0x1
popq %r12
pushq $0xa
popq %r13
xorl %ebx, %ebx
movslq 0xac(%rdx), %rax
cmpq %rax, %rbx
jge 0x1cab4
movq 0xa0(%rdx), %rax
movq (%rax,%rbx,8), %rbp
leaq 0xabe68(%rip), %rdi     # 0xc8850
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0x18(%rbp), %rsi
movq %r14, %rdi
callq 0x1d4bf
movsd 0x20(%rbp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x28(%rbp), %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x30(%rbp), %xmm0
movsd %xmm0, 0x18(%rsp)
movq (%rbp), %rax
movq %rbp, %rdi
callq *0x10(%rax)
movq %r14, %rdi
leaq 0xabe1c(%rip), %rsi     # 0xc8853
movsd 0x8(%rsp), %xmm0
movsd 0x20(%rsp), %xmm1
movsd 0x18(%rsp), %xmm2
movl %eax, %edx
pushq $0x1
popq %rcx
movb $0x3, %al
callq 0x13780
leaq 0xb794a(%rip), %rdi     # 0xd43a6
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
movl %r13d, %edi
movq %r14, %rsi
callq 0x13690
movq (%rbp), %rax
movq %rbp, %rdi
callq *0x10(%rax)
cmpl $0x3, %eax
jne 0x1caa7
movq 0x48(%rbp), %rdx
testq %rdx, %rdx
leaq 0xaba9a(%rip), %rax     # 0xc852c
cmoveq %rax, %rdx
movq %r14, %rdi
leaq 0xb41f5(%rip), %rsi     # 0xd0c95
xorl %eax, %eax
callq 0x13780
incq %rbx
movq 0x10(%rsp), %rdx
jmp 0x1c9c6
leaq 0xb78eb(%rip), %r13     # 0xd43a6
pushq $0x2
popq %rbx
pushq $0x1
popq %rbp
xorl %edx, %edx
movq 0x10(%rsp), %rcx
movslq 0x5c(%rcx), %rax
cmpq %rax, %rdx
jge 0x1cba7
movq 0x50(%rcx), %rax
movq %rdx, 0x8(%rsp)
movq (%rax,%rdx,8), %r15
movl 0x34(%r15), %edx
movl 0x24(%r15), %ecx
movl 0x30(%r15), %r8d
movq %r14, %rdi
leaq 0xabd6b(%rip), %rsi     # 0xc8863
xorl %eax, %eax
callq 0x13780
pushq $0x4
popq %r12
subl $0x1, %r12d
jb 0x1cb1c
movq %r13, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1cb03
xorl %r12d, %r12d
movslq 0x24(%r15), %rax
cmpq %rax, %r12
jge 0x1cb49
movq 0x18(%r15), %rax
movq (%rax,%r12,8), %rax
movl 0x10(%rax), %edx
movq %r14, %rdi
leaq 0xb66ec(%rip), %rsi     # 0xd3229
xorl %eax, %eax
callq 0x13780
incq %r12
jmp 0x1cb1f
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %r12d, %r12d
movslq 0x30(%r15), %rax
cmpq %rax, %r12
jge 0x1cb80
movq 0x28(%r15), %rax
movsd (%rax,%r12,8), %xmm0
movq %r14, %rdi
leaq 0xabca0(%rip), %rsi     # 0xc8814
movb $0x1, %al
callq 0x13780
incq %r12
jmp 0x1cb57
pushq $0xa
popq %r15
movl %r15d, %edi
movq %r14, %rsi
callq 0x13690
movl %r15d, %edi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rdx
incq %rdx
jmp 0x1cac3
leaq 0xb77f8(%rip), %r13     # 0xd43a6
pushq $0x2
popq %rbx
pushq $0x1
popq %rbp
xorl %edx, %edx
movq 0x10(%rsp), %rcx
movslq 0x6c(%rcx), %rax
cmpq %rax, %rdx
jge 0x1cc9a
movq 0x60(%rcx), %rax
movq %rdx, 0x8(%rsp)
movq (%rax,%rdx,8), %r15
movl 0x34(%r15), %edx
movl 0x24(%r15), %ecx
movl 0x30(%r15), %r8d
movq %r14, %rdi
leaq 0xabc84(%rip), %rsi     # 0xc886f
xorl %eax, %eax
callq 0x13780
pushq $0x4
popq %r12
subl $0x1, %r12d
jb 0x1cc0f
movq %r13, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1cbf6
xorl %r12d, %r12d
movslq 0x24(%r15), %rax
cmpq %rax, %r12
jge 0x1cc3c
movq 0x18(%r15), %rax
movq (%rax,%r12,8), %rax
movl 0x10(%rax), %edx
movq %r14, %rdi
leaq 0xb65f9(%rip), %rsi     # 0xd3229
xorl %eax, %eax
callq 0x13780
incq %r12
jmp 0x1cc12
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %r12d, %r12d
movslq 0x30(%r15), %rax
cmpq %rax, %r12
jge 0x1cc73
movq 0x28(%r15), %rax
movsd (%rax,%r12,8), %xmm0
movq %r14, %rdi
leaq 0xabbad(%rip), %rsi     # 0xc8814
movb $0x1, %al
callq 0x13780
incq %r12
jmp 0x1cc4a
pushq $0xa
popq %r15
movl %r15d, %edi
movq %r14, %rsi
callq 0x13690
movl %r15d, %edi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rdx
incq %rdx
jmp 0x1cbb6
xorl %ebx, %ebx
leaq 0xb7703(%rip), %r15     # 0xd43a6
pushq $0x2
popq %r12
pushq $0x1
popq %r13
movq 0x10(%rsp), %rcx
movslq 0x7c(%rcx), %rax
cmpq %rax, %rbx
jge 0x1cd14
movq 0x70(%rcx), %rax
movq (%rax,%rbx,8), %rax
movq 0x18(%rax), %rcx
movq 0x28(%rax), %rsi
movl 0x10(%rcx), %edx
movl 0x10(%rsi), %ecx
movsd 0x38(%rax), %xmm0
movl 0x40(%rax), %r8d
movq %r14, %rdi
leaq 0xabb99(%rip), %rsi     # 0xc887b
movb $0x1, %al
callq 0x13780
pushq $0x4
popq %rbp
subl $0x1, %ebp
jb 0x1cd04
movq %r15, %rdi
movq %r12, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1ccec
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
incq %rbx
jmp 0x1ccab
pushq $0x2
popq %r15
pushq $0x1
popq %r12
leaq 0xabb69(%rip), %r13     # 0xc888c
xorl %ebx, %ebx
movslq 0x8c(%rcx), %rax
cmpq %rax, %rbx
jge 0x1cece
movq 0x80(%rcx), %rax
movq (%rax,%rbx,8), %rbp
leaq 0x28(%rbp), %rsi
leaq 0x188(%rsp), %rdi
callq 0x781cc
leaq 0x70(%rbp), %rsi
leaq 0x108(%rsp), %rdi
callq 0x792e2
leaq 0x58(%rbp), %rsi
leaq 0x28(%rsp), %rdi
callq 0x7898c
leaq 0xabb12(%rip), %rdi     # 0xc8889
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0xb8(%rbp), %rsi
movq %r14, %rdi
callq 0x1d4bf
movsd 0x188(%rsp), %xmm0
movsd 0x190(%rsp), %xmm1
movsd 0x198(%rsp), %xmm2
movq %r14, %rdi
movq %r13, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x108(%rsp), %xmm0
movsd 0x110(%rsp), %xmm1
movsd 0x118(%rsp), %xmm2
movq %r14, %rdi
movq %r13, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x28(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x38(%rsp), %xmm2
movq %r14, %rdi
movq %r13, %rsi
movb $0x3, %al
callq 0x13780
movq 0x18(%rbp), %rax
pushq $-0x1
popq %rdx
testq %rax, %rax
je 0x1ce12
movl 0x20(%rax), %edx
movsd 0x88(%rbp), %xmm0
movq %r14, %rdi
leaq 0xaba72(%rip), %rsi     # 0xc8896
movb $0x1, %al
callq 0x13780
movl 0x90(%rbp), %edx
movl 0x94(%rbp), %ecx
movq %r14, %rdi
leaq 0xaba5e(%rip), %rsi     # 0xc889f
xorl %eax, %eax
callq 0x13780
movsd 0xa8(%rbp), %xmm0
movsd 0x98(%rbp), %xmm1
movsd 0xa0(%rbp), %xmm2
movq %r14, %rdi
leaq 0xaba3d(%rip), %rsi     # 0xc88a7
movb $0x3, %al
callq 0x13780
movl 0xc0(%rbp), %edx
movq %r14, %rdi
leaq 0xac0f8(%rip), %rsi     # 0xc8f79
xorl %eax, %eax
callq 0x13780
movsd 0xb0(%rbp), %xmm0
movq %r14, %rdi
leaq 0xaba13(%rip), %rsi     # 0xc88ad
movb $0x1, %al
callq 0x13780
leaq 0xb74fe(%rip), %rdi     # 0xd43a6
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
incq %rbx
movq 0x10(%rsp), %rcx
jmp 0x1cd25
pushq $0x2
popq %r15
pushq $0x1
popq %r12
leaq 0xab9de(%rip), %rbp     # 0xc88bb
xorl %edx, %edx
movq 0x10(%rsp), %rcx
movslq 0x9c(%rcx), %rax
cmpq %rax, %rdx
jge 0x1d317
movq 0x90(%rcx), %rax
movq %rdx, 0x8(%rsp)
movq (%rax,%rdx,8), %r13
leaq 0x30(%r13), %rsi
leaq 0x28(%rsp), %rdi
callq 0x781cc
leaq 0x78(%r13), %rsi
leaq 0xf0(%rsp), %rdi
callq 0x792e2
leaq 0x60(%r13), %rsi
leaq 0xd8(%rsp), %rdi
callq 0x7898c
leaq 0xab977(%rip), %rdi     # 0xc88b2
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
movq 0x1c0(%r13), %rsi
movq %r14, %rdi
callq 0x1d4bf
movsd 0x28(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x38(%rsp), %xmm2
movq %r14, %rdi
leaq 0xab918(%rip), %rbx     # 0xc888c
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0xf0(%rsp), %xmm0
movsd 0xf8(%rsp), %xmm1
movsd 0x100(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0xd8(%rsp), %xmm0
movsd 0xe0(%rsp), %xmm1
movsd 0xe8(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x90(%r13), %xmm0
movq %r14, %rdi
leaq 0xab8d4(%rip), %rsi     # 0xc88b5
movb $0x1, %al
callq 0x13780
movq 0x18(%r13), %rax
pushq $-0x1
popq %rdx
testq %rax, %rax
je 0x1cff7
movl 0x10(%rax), %edx
movq %r14, %rdi
leaq 0xab8a1(%rip), %rsi     # 0xc88a2
xorl %eax, %eax
callq 0x13780
movl 0x98(%r13), %edx
movl 0x9c(%r13), %ecx
movq %r14, %rdi
leaq 0xab87f(%rip), %rsi     # 0xc889f
xorl %eax, %eax
callq 0x13780
movsd 0xb0(%r13), %xmm0
movsd 0xb8(%r13), %xmm1
movq %r14, %rdi
leaq 0xab867(%rip), %rbx     # 0xc88aa
movq %rbx, %rsi
movb $0x2, %al
callq 0x13780
movsd 0xa0(%r13), %xmm0
movsd 0xa8(%r13), %xmm1
movq %r14, %rdi
movq %rbx, %rsi
movb $0x2, %al
callq 0x13780
movl 0x1c8(%r13), %edx
movq %r14, %rdi
leaq 0xabefc(%rip), %rsi     # 0xc8f79
xorl %eax, %eax
callq 0x13780
movl 0xc0(%r13), %edx
movq %r14, %rdi
leaq 0xab80d(%rip), %rbx     # 0xc88a2
movq %rbx, %rsi
xorl %eax, %eax
callq 0x13780
movl 0x1c8(%r13), %edx
andl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x13780
pushq $0x2
popq %rbx
subl $0x1, %ebx
jb 0x1d0d1
movq %rbp, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1d0b9
cmpl $0x0, 0xc0(%r13)
je 0x1d12a
movsd 0xc8(%r13), %xmm0
movsd 0xd0(%r13), %xmm1
movsd 0xd8(%r13), %xmm2
movq %r14, %rdi
leaq 0xab7a8(%rip), %rsi     # 0xc88a8
movb $0x3, %al
callq 0x13780
movsd 0xe0(%r13), %xmm0
movsd 0xe8(%r13), %xmm1
movq %r14, %rdi
leaq 0xab788(%rip), %rsi     # 0xc88ab
movb $0x2, %al
callq 0x13780
testb $0x1, 0x1c8(%r13)
je 0x1d2ff
leaq 0xf0(%r13), %rsi
leaq 0x188(%rsp), %rbx
movq %rbx, %rdi
callq 0x66f38
leaq 0x150(%r13), %rsi
leaq 0x108(%rsp), %rdi
callq 0x66f38
leaq 0xc0(%rsp), %rdi
movq %rbx, %rsi
leaq 0x50951b(%rip), %rbx    # 0x526690
movq %rbx, %rdx
callq 0x6a31b
leaq 0xa8(%rsp), %rdi
leaq 0x108(%rsp), %rsi
movq %rbx, %rdx
callq 0x6a31b
leaq 0x90(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0xb3054(%rip), %rbx     # 0xd0200
movq %rbx, %rdx
callq 0x6a2a3
leaq 0x78(%rsp), %rdi
leaq 0x108(%rsp), %rsi
movq %rbx, %rdx
callq 0x6a2a3
leaq 0x60(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0xb2fc3(%rip), %rbx     # 0xd01a0
movq %rbx, %rdx
callq 0x6a2a3
leaq 0x48(%rsp), %rdi
leaq 0x108(%rsp), %rsi
movq %rbx, %rdx
callq 0x6a2a3
movsd 0xc0(%rsp), %xmm0
movsd 0xc8(%rsp), %xmm1
movsd 0xd0(%rsp), %xmm2
movq %r14, %rdi
leaq 0xab688(%rip), %rbx     # 0xc88a7
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x90(%rsp), %xmm0
movsd 0x98(%rsp), %xmm1
movsd 0xa0(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x60(%rsp), %xmm0
movsd 0x68(%rsp), %xmm1
movsd 0x70(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0xa8(%rsp), %xmm0
movsd 0xb0(%rsp), %xmm1
movsd 0xb8(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x78(%rsp), %xmm0
movsd 0x80(%rsp), %xmm1
movsd 0x88(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x48(%rsp), %xmm0
movsd 0x50(%rsp), %xmm1
movsd 0x58(%rsp), %xmm2
movq %r14, %rdi
movq %rbx, %rsi
movb $0x3, %al
callq 0x13780
movsd 0x1b0(%r13), %xmm0
movsd 0x1b8(%r13), %xmm1
movq %r14, %rdi
leaq 0xab5c6(%rip), %rsi     # 0xc88be
movb $0x2, %al
callq 0x13780
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rdx
incq %rdx
jmp 0x1cedf
leaq 0xb7088(%rip), %r12     # 0xd43a6
pushq $0x2
popq %r13
pushq $0x1
popq %rbx
xorl %edx, %edx
movq 0x10(%rsp), %rcx
movslq 0x3c(%rcx), %rax
cmpq %rax, %rdx
jge 0x1d3dd
movq 0x30(%rcx), %rax
movq %rdx, 0x8(%rsp)
movq (%rax,%rdx,8), %rbp
movl 0x2c(%rbp), %edx
movq 0x18(%rbp), %rax
movl 0x10(%rax), %ecx
movl 0x28(%rbp), %r8d
movq %r14, %rdi
leaq 0xab56c(%rip), %rsi     # 0xc88ca
xorl %eax, %eax
callq 0x13780
pushq $0x4
popq %r15
subl $0x1, %r15d
jb 0x1d382
movq %r12, %rdi
movq %r13, %rsi
movq %rbx, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1d369
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %r15d, %r15d
movslq 0x28(%rbp), %rax
cmpq %rax, %r15
jge 0x1d3b9
movq 0x20(%rbp), %rax
movsd (%rax,%r15,8), %xmm0
movq %r14, %rdi
leaq 0xab467(%rip), %rsi     # 0xc8814
movb $0x1, %al
callq 0x13780
incq %r15
jmp 0x1d390
pushq $0xa
popq %rbp
movl %ebp, %edi
movq %r14, %rsi
callq 0x13690
movl %ebp, %edi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rdx
incq %rdx
jmp 0x1d327
leaq 0xb6fc2(%rip), %r12     # 0xd43a6
pushq $0x2
popq %r13
pushq $0x1
popq %rbx
xorl %edx, %edx
movslq 0x4c(%rcx), %rax
cmpq %rax, %rdx
jge 0x1d4a3
movq 0x40(%rcx), %rax
movq %rdx, 0x8(%rsp)
movq (%rax,%rdx,8), %rbp
movl 0x2c(%rbp), %edx
movq 0x18(%rbp), %rax
movl 0x10(%rax), %ecx
movl 0x28(%rbp), %r8d
movq %r14, %rdi
leaq 0xab4b7(%rip), %rsi     # 0xc88d6
xorl %eax, %eax
callq 0x13780
pushq $0x4
popq %r15
subl $0x1, %r15d
jb 0x1d443
movq %r12, %rdi
movq %r13, %rsi
movq %rbx, %rdx
movq %r14, %rcx
callq 0x139e0
jmp 0x1d42a
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x13690
xorl %r15d, %r15d
movslq 0x28(%rbp), %rax
cmpq %rax, %r15
jge 0x1d47a
movq 0x20(%rbp), %rax
movsd (%rax,%r15,8), %xmm0
movq %r14, %rdi
leaq 0xab3a6(%rip), %rsi     # 0xc8814
movb $0x1, %al
callq 0x13780
incq %r15
jmp 0x1d451
pushq $0xa
popq %rbp
movl %ebp, %edi
movq %r14, %rsi
callq 0x13690
movl %ebp, %edi
movq %r14, %rsi
callq 0x13690
movq 0x8(%rsp), %rdx
incq %rdx
movq 0x10(%rsp), %rcx
jmp 0x1d3ed
andb $-0x2, 0x1e8(%rcx)
pushq $0x1
popq %rax
addq $0x208, %rsp            # imm = 0x208
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq