// File: matthewarcus[P]mmps/project.cpp
// Function: main
int main(int argc, char* argv[])
{
  Image inImage;
  const char *infilename = "images/earth.ppm";
  const char *outfilename = NULL;
  const char *backfilename = NULL;
  int width = 800;
  int height = 600;
  bool adjust = false;

  TransformParams params;
  // Multi image stuff
  double xinc = 0.0;
  double yinc = 0.0;
  double zinc = 0.0;
  double turninc = 0.0;
  double tiltinc = 0.0;
  double latinc = 0.0;
  double loninc = 0.0;
  double timeinc = 0.0;
  double dateinc = 0.0;
  int loop = 1;

  bool invert = false; // Apply the inverse mapping

  // array of pointers. Dynamic allocation is less typing than
  // stack allocating everything.
  OptSpec *optspecs [] = {
    // General options
    new RgbSpec ("-bg", params.background),
    new IntSpec ("-w", width),
    new IntSpec ("-h", height),
    new BoolSpec ("-adjust", adjust),
    new StringSpec ("-f", infilename),
    new StringSpec ("-out", outfilename),
    new StringSpec ("-back", backfilename),
    new BoolSpec ("-i", invert),

    // First the projection parameters
    new DoubleSpec ("-tilt", params.tilt, 2 * pi / 360.0 ),
    new DoubleSpec ("-turn", params.turn, 2 * pi / 360.0 ),
    new DoubleSpec ("-rotate", params.rotate, 2 * pi / 360.0 ),
    new DoubleSpec ("-lat", params.lat, 2 * pi / 360.0 ),
    new DoubleSpec ("-long", params.lon, 2 * pi / 360.0 ),
    new DoubleSpec ("-scale", params.scale),
    new DoubleSpec ("-radius", params.radius, 2 * pi / 360.0 ),
    new DoubleSpec ("-x", params.x),
    new DoubleSpec ("-y", params.y),
    new DoubleSpec ("-z", params.z),
    new DoubleSpec ("-ox", params.ox),
    new DoubleSpec ("-oy", params.oy),
    new DoubleSpec ("-oz", params.oz),
    new DoubleSpec ("-a", params.a),
    new DoubleSpec ("-date", params.date),
    new DoubleSpec ("-time", params.time, 2 * pi / 24.0),
    new DoubleSpec ("-p", params.p, 2 * pi / 360.0),
    new DoubleSpec ("-aw", params.aw, 2 * pi / 360.0),
    new DoubleSpec ("-conic", params.conic),
    new DoubleSpec ("-conicr", params.conicr),
    new DoubleSpec ("-xoff", params.xoff),
    new DoubleSpec ("-yoff", params.yoff),
    new BoolSpec ("-sun", params.sun),

    // Grid and dial options
    // These accumulate in a list and are 'executed' in order.
    new CmdSpec ("-color", 1), // Set color
    new CmdSpec ("-gridx", 1), // Set grid coordinates
    new CmdSpec ("-gridy", 1),
    new CmdSpec ("-gridoff", 1), // Angular offset
    new CmdSpec ("-dlat", 1), // Set dial origin
    new CmdSpec ("-dlong", 1),

    new CmdSpec ("-grid", 0),
    new CmdSpec ("-localhours",0),
    new CmdSpec ("-temporaryhours",0),
    new CmdSpec ("-altitudes",0),
    new CmdSpec ("-analemma",0),
    new CmdSpec ("-tropics",0),
    new CmdSpec ("-arctics",0),
    new CmdSpec ("-dateline",1),
    new CmdSpec ("-datetime",1),

    // Backwards compatible - set default initial color
    new RgbSpec ("-gridcolor", params.gridcolor),

    // Loop options
    new IntSpec ("-loop", loop ),
    new DoubleSpec ("-tiltinc", tiltinc, 2 * pi / 360.0 ),
    new DoubleSpec ("-turninc", tiltinc, 2 * pi / 360.0 ),
    new DoubleSpec ("-latinc", latinc, 2 * pi / 360.0 ),
    new DoubleSpec ("-longinc", loninc, 2 * pi / 360.0 ),
    new DoubleSpec ("-xinc", xinc),
    new DoubleSpec ("-yinc", yinc),
    new DoubleSpec ("-zinc", zinc),
    new DoubleSpec ("-dateinc", dateinc, 2 * pi / 365.25),
    new DoubleSpec ("-timeinc", timeinc, 2 * pi / 24.0),

    NULL // Finish up
  };
  
  char *progname = argv[0];
  argc--;argv++;
  if (argc == 1 && strcmp(argv[0],"-v") == 0) {
    fprintf(stderr,"MMPS Version %s " __DATE__ "\n", VERSION);
    exit(0);
  }

  Transform* transform = NULL;

  while (argc > 0) {
    int result = OptSpec::ReadOpts(argc, argv, optspecs);
    if (result == -1) {
      // Assume error has been reported by ReadOpts
      error(usage, progname);
    } else if (result != 1) {
      // Option not recognized
      // Is it a transform>?
      Transform *t = Transform::GetTransform(argv[0]);
      if (t == NULL) {
	fprintf(stderr,"Unrecognized option %s\n",argv[0]);
	error(usage, progname);
      } else {
	if (transform == NULL) {
	  // Found a transform
	  transform = t;
	} else {
	  // Oops, two transforms
	  fprintf(stderr,"Can only specify one projection type\n");
	  error(usage, progname); 
	}
      }
    }
    argc--; argv++;
  }

  if (transform == NULL) {
    fprintf(stderr,"Need to specify a projection type\n");
    error(usage, progname);
  }

  inImage.Read(infilename);

  if (adjust) {
    transform->AdjustSize(width, height, params);
  }
  Image outImage(width, height);
  Image backImage;
  if (backfilename != NULL) {
    backImage.Read(backfilename);
  }
  for (int i = 0; i < loop; i++) {
    if (backfilename != NULL) {
      outImage.Copy(backImage);
      params.noback = true;
    }
    transform->Init(params);
    if (invert) {
      transform->TransformImageInv(inImage, outImage, params);
      // No commands for inverse transformation yet
    } else {
      transform->TransformImage(inImage, outImage, params);
      transform->DoCommands(outImage, params, CmdSpec::getcmdlist());
    }
    if (loop > 1) {
      char fname[256];
      sprintf(fname, "%s%04d.ppm", outfilename, i);
      outImage.Write(fname);
      fprintf(stderr, "Written %s\n", fname);
    } else {
      outImage.Write(outfilename);
    }      
    params.turn += turninc;
    params.tilt += tiltinc;
    params.lat += latinc;
    params.lon += loninc;
    params.x += xinc;
    params.y += yinc;
    params.z += zinc;
    params.time += timeinc;
    params.date += dateinc;
  }
  delete(transform);
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x8f0, %rsp            # imm = 0x8F0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x40(%rbp), %rdi
movq %rdx, %rsi
callq 0x13bd0
leaq 0x10735(%rip), %rax     # 0x16275
movq %rax, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movl $0x320, -0x5c(%rbp)     # imm = 0x320
movl $0x258, -0x60(%rbp)     # imm = 0x258
movb $0x0, -0x61(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x9bd0
jmp 0x5b74
movq $0x0, -0x170(%rbp)
movq $0x0, -0x178(%rbp)
movq $0x0, -0x180(%rbp)
movq $0x0, -0x188(%rbp)
movq $0x0, -0x190(%rbp)
movq $0x0, -0x198(%rbp)
movq $0x0, -0x1a0(%rbp)
movq $0x0, -0x1a8(%rbp)
movq $0x0, -0x1b0(%rbp)
movl $0x1, -0x1b4(%rbp)
movb $0x0, -0x1b5(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x538(%rbp)
jmp 0x5bfb
movq -0x538(%rbp), %rdi
leaq -0x98(%rbp), %rdx
leaq 0x10676(%rip), %rsi     # 0x16286
callq 0x7cd0
jmp 0x5c17
movq -0x538(%rbp), %rax
movq %rax, -0x390(%rbp)
leaq -0x388(%rbp), %rax
movq %rax, -0x548(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x540(%rbp)
jmp 0x5c46
movq -0x540(%rbp), %rdi
leaq 0x10636(%rip), %rsi     # 0x1628a
leaq -0x5c(%rbp), %rdx
callq 0x11af0
jmp 0x5c5f
movq -0x548(%rbp), %rax
movq -0x540(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x380(%rbp), %rax
movq %rax, -0x558(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x550(%rbp)
jmp 0x5c91
movq -0x550(%rbp), %rdi
leaq 0x105ee(%rip), %rsi     # 0x1628d
leaq -0x60(%rbp), %rdx
callq 0x11af0
jmp 0x5caa
movq -0x558(%rbp), %rax
movq -0x550(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x378(%rbp), %rax
movq %rax, -0x568(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x560(%rbp)
jmp 0x5cdc
movq -0x560(%rbp), %rdi
leaq 0x105a6(%rip), %rsi     # 0x16290
leaq -0x61(%rbp), %rdx
callq 0x11940
jmp 0x5cf5
movq -0x568(%rbp), %rax
movq -0x560(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x370(%rbp), %rax
movq %rax, -0x578(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x570(%rbp)
jmp 0x5d27
movq -0x570(%rbp), %rdi
leaq 0x10563(%rip), %rsi     # 0x16298
leaq -0x48(%rbp), %rdx
callq 0x119f0
jmp 0x5d40
movq -0x578(%rbp), %rax
movq -0x570(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x368(%rbp), %rax
movq %rax, -0x588(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x580(%rbp)
jmp 0x5d72
movq -0x580(%rbp), %rdi
leaq 0x1051b(%rip), %rsi     # 0x1629b
leaq -0x50(%rbp), %rdx
callq 0x119f0
jmp 0x5d8b
movq -0x588(%rbp), %rax
movq -0x580(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x360(%rbp), %rax
movq %rax, -0x598(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x590(%rbp)
jmp 0x5dbd
movq -0x590(%rbp), %rdi
leaq 0x104d5(%rip), %rsi     # 0x162a0
leaq -0x58(%rbp), %rdx
callq 0x119f0
jmp 0x5dd6
movq -0x598(%rbp), %rax
movq -0x590(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x358(%rbp), %rax
movq %rax, -0x5a8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x5a0(%rbp)
jmp 0x5e08
movq -0x5a0(%rbp), %rdi
leaq 0x10490(%rip), %rsi     # 0x162a6
leaq -0x1b5(%rbp), %rdx
callq 0x11940
jmp 0x5e24
movq -0x5a8(%rbp), %rax
movq -0x5a0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x350(%rbp), %rax
movq %rax, -0x5b8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x5b0(%rbp)
jmp 0x5e56
movq -0x5b0(%rbp), %rdi
leaq 0x10445(%rip), %rsi     # 0x162a9
leaq -0x158(%rbp), %rdx
movsd 0x10195(%rip), %xmm0    # 0x16008
callq 0x11c00
jmp 0x5e7a
movq -0x5b8(%rbp), %rax
movq -0x5b0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x348(%rbp), %rax
movq %rax, -0x5c8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x5c0(%rbp)
jmp 0x5eac
movq -0x5c0(%rbp), %rdi
leaq -0x150(%rbp), %rdx
leaq 0x103ee(%rip), %rsi     # 0x162af
movsd 0x1013f(%rip), %xmm0    # 0x16008
callq 0x11c00
jmp 0x5ed0
movq -0x5c8(%rbp), %rax
movq -0x5c0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x340(%rbp), %rax
movq %rax, -0x5d8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x5d0(%rbp)
jmp 0x5f02
movq -0x5d0(%rbp), %rdi
leaq -0x148(%rbp), %rdx
leaq 0x1039e(%rip), %rsi     # 0x162b5
movsd 0x100e9(%rip), %xmm0    # 0x16008
callq 0x11c00
jmp 0x5f26
movq -0x5d8(%rbp), %rax
movq -0x5d0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x338(%rbp), %rax
movq %rax, -0x5e8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x5e0(%rbp)
jmp 0x5f58
movq -0x5e0(%rbp), %rdi
leaq -0x140(%rbp), %rdx
leaq 0x10350(%rip), %rsi     # 0x162bd
movsd 0x10093(%rip), %xmm0    # 0x16008
callq 0x11c00
jmp 0x5f7c
movq -0x5e8(%rbp), %rax
movq -0x5e0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x330(%rbp), %rax
movq %rax, -0x5f8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x5f0(%rbp)
jmp 0x5fae
movq -0x5f0(%rbp), %rdi
leaq -0x138(%rbp), %rdx
leaq 0x102ff(%rip), %rsi     # 0x162c2
movsd 0x1003d(%rip), %xmm0    # 0x16008
callq 0x11c00
jmp 0x5fd2
movq -0x5f8(%rbp), %rax
movq -0x5f0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x328(%rbp), %rax
movq %rax, -0x608(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x600(%rbp)
jmp 0x6004
movq -0x600(%rbp), %rdi
leaq -0x130(%rbp), %rdx
leaq 0x102af(%rip), %rsi     # 0x162c8
movsd 0xffef(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6028
movq -0x608(%rbp), %rax
movq -0x600(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x320(%rbp), %rax
movq %rax, -0x618(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x610(%rbp)
jmp 0x605a
movq -0x610(%rbp), %rdi
leaq -0x128(%rbp), %rdx
leaq 0x10260(%rip), %rsi     # 0x162cf
movsd 0xff91(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x607e
movq -0x618(%rbp), %rax
movq -0x610(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x318(%rbp), %rax
movq %rax, -0x628(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x620(%rbp)
jmp 0x60b0
movq -0x620(%rbp), %rdi
leaq -0x110(%rbp), %rdx
leaq 0x10212(%rip), %rsi     # 0x162d7
movsd 0xff43(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x60d4
movq -0x628(%rbp), %rax
movq -0x620(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x310(%rbp), %rax
movq %rax, -0x638(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x630(%rbp)
jmp 0x6106
movq -0x630(%rbp), %rdi
leaq -0x108(%rbp), %rdx
leaq 0x101bf(%rip), %rsi     # 0x162da
movsd 0xfeed(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x612a
movq -0x638(%rbp), %rax
movq -0x630(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x308(%rbp), %rax
movq %rax, -0x648(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x640(%rbp)
jmp 0x615c
movq -0x640(%rbp), %rdi
leaq -0x100(%rbp), %rdx
leaq 0x1016c(%rip), %rsi     # 0x162dd
movsd 0xfe97(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6180
movq -0x648(%rbp), %rax
movq -0x640(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x300(%rbp), %rax
movq %rax, -0x658(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x650(%rbp)
jmp 0x61b2
movq -0x650(%rbp), %rdi
leaq -0xf8(%rbp), %rdx
leaq 0x10119(%rip), %rsi     # 0x162e0
movsd 0xfe41(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x61d6
movq -0x658(%rbp), %rax
movq -0x650(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2f8(%rbp), %rax
movq %rax, -0x668(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x660(%rbp)
jmp 0x6208
movq -0x660(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
leaq 0x100c7(%rip), %rsi     # 0x162e4
movsd 0xfdeb(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x622c
movq -0x668(%rbp), %rax
movq -0x660(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2f0(%rbp), %rax
movq %rax, -0x678(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x670(%rbp)
jmp 0x625e
movq -0x670(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
leaq 0x10075(%rip), %rsi     # 0x162e8
movsd 0xfd95(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6282
movq -0x678(%rbp), %rax
movq -0x670(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2e8(%rbp), %rax
movq %rax, -0x688(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x680(%rbp)
jmp 0x62b4
movq -0x680(%rbp), %rdi
leaq -0x120(%rbp), %rdx
leaq 0x10023(%rip), %rsi     # 0x162ec
movsd 0xfd3f(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x62d8
movq -0x688(%rbp), %rax
movq -0x680(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2e0(%rbp), %rax
movq %rax, -0x698(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x690(%rbp)
jmp 0x630a
movq -0x690(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
leaq 0xffd0(%rip), %rsi      # 0x162ef
movsd 0xfce9(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x632e
movq -0x698(%rbp), %rax
movq -0x690(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2d8(%rbp), %rax
movq %rax, -0x6a8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x6a0(%rbp)
jmp 0x6360
movq -0x6a0(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
leaq 0xff80(%rip), %rsi      # 0x162f5
movsd 0xfc9b(%rip), %xmm0     # 0x16018
callq 0x11c00
jmp 0x6384
movq -0x6a8(%rbp), %rax
movq -0x6a0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2d0(%rbp), %rax
movq %rax, -0x6b8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x6b0(%rbp)
jmp 0x63b6
movq -0x6b0(%rbp), %rdi
leaq -0xd8(%rbp), %rdx
leaq 0xff30(%rip), %rsi      # 0x162fb
movsd 0xfc35(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x63da
movq -0x6b8(%rbp), %rax
movq -0x6b0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2c8(%rbp), %rax
movq %rax, -0x6c8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x6c0(%rbp)
jmp 0x640c
movq -0x6c0(%rbp), %rdi
leaq -0x118(%rbp), %rdx
leaq 0xfedd(%rip), %rsi      # 0x162fe
movsd 0xfbdf(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x6430
movq -0x6c8(%rbp), %rax
movq -0x6c0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2c0(%rbp), %rax
movq %rax, -0x6d8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x6d0(%rbp)
jmp 0x6462
movq -0x6d0(%rbp), %rdi
leaq -0xb8(%rbp), %rdx
leaq 0xfe8b(%rip), %rsi      # 0x16302
movsd 0xfb91(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6486
movq -0x6d8(%rbp), %rax
movq -0x6d0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2b8(%rbp), %rax
movq %rax, -0x6e8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x6e0(%rbp)
jmp 0x64b8
movq -0x6e0(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
leaq 0xfe3c(%rip), %rsi      # 0x16309
movsd 0xfb3b(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x64dc
movq -0x6e8(%rbp), %rax
movq -0x6e0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2b0(%rbp), %rax
movq %rax, -0x6f8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x6f0(%rbp)
jmp 0x650e
movq -0x6f0(%rbp), %rdi
leaq -0xa8(%rbp), %rdx
leaq 0xfdee(%rip), %rsi      # 0x16311
movsd 0xfae5(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6532
movq -0x6f8(%rbp), %rax
movq -0x6f0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2a8(%rbp), %rax
movq %rax, -0x708(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x700(%rbp)
jmp 0x6564
movq -0x700(%rbp), %rdi
leaq -0xa0(%rbp), %rdx
leaq 0xfd9e(%rip), %rsi      # 0x16317
movsd 0xfa8f(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6588
movq -0x708(%rbp), %rax
movq -0x700(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2a0(%rbp), %rax
movq %rax, -0x718(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x710(%rbp)
jmp 0x65ba
movq -0x710(%rbp), %rdi
leaq -0xe0(%rbp), %rdx
leaq 0xfd4e(%rip), %rsi      # 0x1631d
callq 0x11940
jmp 0x65d6
movq -0x718(%rbp), %rax
movq -0x710(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x298(%rbp), %rax
movq %rax, -0x728(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x720(%rbp)
jmp 0x6608
movq -0x720(%rbp), %rdi
leaq 0xfd0c(%rip), %rsi      # 0x16322
movl $0x1, %edx
callq 0x11d40
jmp 0x6622
movq -0x728(%rbp), %rax
movq -0x720(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x290(%rbp), %rax
movq %rax, -0x738(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x730(%rbp)
jmp 0x6654
movq -0x730(%rbp), %rdi
leaq 0xfcc7(%rip), %rsi      # 0x16329
movl $0x1, %edx
callq 0x11d40
jmp 0x666e
movq -0x738(%rbp), %rax
movq -0x730(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x288(%rbp), %rax
movq %rax, -0x748(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x740(%rbp)
jmp 0x66a0
movq -0x740(%rbp), %rdi
leaq 0xfc82(%rip), %rsi      # 0x16330
movl $0x1, %edx
callq 0x11d40
jmp 0x66ba
movq -0x748(%rbp), %rax
movq -0x740(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x280(%rbp), %rax
movq %rax, -0x758(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x750(%rbp)
jmp 0x66ec
movq -0x750(%rbp), %rdi
leaq 0xfc3d(%rip), %rsi      # 0x16337
movl $0x1, %edx
callq 0x11d40
jmp 0x6706
movq -0x758(%rbp), %rax
movq -0x750(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x278(%rbp), %rax
movq %rax, -0x768(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x760(%rbp)
jmp 0x6738
movq -0x760(%rbp), %rdi
leaq 0xfbfa(%rip), %rsi      # 0x16340
movl $0x1, %edx
callq 0x11d40
jmp 0x6752
movq -0x768(%rbp), %rax
movq -0x760(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x270(%rbp), %rax
movq %rax, -0x778(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x770(%rbp)
jmp 0x6784
movq -0x770(%rbp), %rdi
leaq 0xfbb4(%rip), %rsi      # 0x16346
movl $0x1, %edx
callq 0x11d40
jmp 0x679e
movq -0x778(%rbp), %rax
movq -0x770(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x268(%rbp), %rax
movq %rax, -0x788(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x780(%rbp)
jmp 0x67d0
movq -0x780(%rbp), %rdi
leaq 0xfb6f(%rip), %rsi      # 0x1634d
xorl %edx, %edx
callq 0x11d40
jmp 0x67e7
movq -0x788(%rbp), %rax
movq -0x780(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x260(%rbp), %rax
movq %rax, -0x798(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x790(%rbp)
jmp 0x6819
movq -0x790(%rbp), %rdi
leaq 0xfb2c(%rip), %rsi      # 0x16353
xorl %edx, %edx
callq 0x11d40
jmp 0x6830
movq -0x798(%rbp), %rax
movq -0x790(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x258(%rbp), %rax
movq %rax, -0x7a8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x7a0(%rbp)
jmp 0x6862
movq -0x7a0(%rbp), %rdi
leaq 0xfaef(%rip), %rsi      # 0x1635f
xorl %edx, %edx
callq 0x11d40
jmp 0x6879
movq -0x7a8(%rbp), %rax
movq -0x7a0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x250(%rbp), %rax
movq %rax, -0x7b8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x7b0(%rbp)
jmp 0x68ab
movq -0x7b0(%rbp), %rdi
leaq 0xfab6(%rip), %rsi      # 0x1636f
xorl %edx, %edx
callq 0x11d40
jmp 0x68c2
movq -0x7b8(%rbp), %rax
movq -0x7b0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x248(%rbp), %rax
movq %rax, -0x7c8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x7c0(%rbp)
jmp 0x68f4
movq -0x7c0(%rbp), %rdi
leaq 0xfa78(%rip), %rsi      # 0x1637a
xorl %edx, %edx
callq 0x11d40
jmp 0x690b
movq -0x7c8(%rbp), %rax
movq -0x7c0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x240(%rbp), %rax
movq %rax, -0x7d8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x7d0(%rbp)
jmp 0x693d
movq -0x7d0(%rbp), %rdi
leaq 0xfa39(%rip), %rsi      # 0x16384
xorl %edx, %edx
callq 0x11d40
jmp 0x6954
movq -0x7d8(%rbp), %rax
movq -0x7d0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x238(%rbp), %rax
movq %rax, -0x7e8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x7e0(%rbp)
jmp 0x6986
movq -0x7e0(%rbp), %rdi
leaq 0xf9f9(%rip), %rsi      # 0x1638d
xorl %edx, %edx
callq 0x11d40
jmp 0x699d
movq -0x7e8(%rbp), %rax
movq -0x7e0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x230(%rbp), %rax
movq %rax, -0x7f8(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x7f0(%rbp)
jmp 0x69cf
movq -0x7f0(%rbp), %rdi
leaq 0xf9b9(%rip), %rsi      # 0x16396
movl $0x1, %edx
callq 0x11d40
jmp 0x69e9
movq -0x7f8(%rbp), %rax
movq -0x7f0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x228(%rbp), %rax
movq %rax, -0x808(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x800(%rbp)
jmp 0x6a1b
movq -0x800(%rbp), %rdi
leaq 0xf977(%rip), %rsi      # 0x163a0
movl $0x1, %edx
callq 0x11d40
jmp 0x6a35
movq -0x808(%rbp), %rax
movq -0x800(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x220(%rbp), %rax
movq %rax, -0x818(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x810(%rbp)
jmp 0x6a67
movq -0x810(%rbp), %rdi
leaq -0x8c(%rbp), %rdx
leaq 0xf92e(%rip), %rsi      # 0x163aa
callq 0x7cd0
jmp 0x6a83
movq -0x818(%rbp), %rax
movq -0x810(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x218(%rbp), %rax
movq %rax, -0x828(%rbp)
movl $0x18, %edi
callq 0x52a0
movq %rax, -0x820(%rbp)
jmp 0x6ab5
movq -0x820(%rbp), %rdi
leaq 0xf8f2(%rip), %rsi      # 0x163b5
leaq -0x1b4(%rbp), %rdx
callq 0x11af0
jmp 0x6ad1
movq -0x828(%rbp), %rax
movq -0x820(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x210(%rbp), %rax
movq %rax, -0x838(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x830(%rbp)
jmp 0x6b03
movq -0x830(%rbp), %rdi
leaq 0xf8aa(%rip), %rsi      # 0x163bb
leaq -0x190(%rbp), %rdx
movsd 0xf4e8(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x6b27
movq -0x838(%rbp), %rax
movq -0x830(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x208(%rbp), %rax
movq %rax, -0x848(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x840(%rbp)
jmp 0x6b59
movq -0x840(%rbp), %rdi
leaq 0xf85d(%rip), %rsi      # 0x163c4
leaq -0x190(%rbp), %rdx
movsd 0xf492(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x6b7d
movq -0x848(%rbp), %rax
movq -0x840(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x200(%rbp), %rax
movq %rax, -0x858(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x850(%rbp)
jmp 0x6baf
movq -0x850(%rbp), %rdi
leaq 0xf810(%rip), %rsi      # 0x163cd
leaq -0x198(%rbp), %rdx
movsd 0xf43c(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x6bd3
movq -0x858(%rbp), %rax
movq -0x850(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1f8(%rbp), %rax
movq %rax, -0x868(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x860(%rbp)
jmp 0x6c05
movq -0x860(%rbp), %rdi
leaq 0xf7c2(%rip), %rsi      # 0x163d5
leaq -0x1a0(%rbp), %rdx
movsd 0xf3e6(%rip), %xmm0     # 0x16008
callq 0x11c00
jmp 0x6c29
movq -0x868(%rbp), %rax
movq -0x860(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1f0(%rbp), %rax
movq %rax, -0x878(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x870(%rbp)
jmp 0x6c5b
movq -0x870(%rbp), %rdi
leaq 0xf775(%rip), %rsi      # 0x163de
leaq -0x170(%rbp), %rdx
movsd 0xf398(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6c7f
movq -0x878(%rbp), %rax
movq -0x870(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1e8(%rbp), %rax
movq %rax, -0x888(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x880(%rbp)
jmp 0x6cb1
movq -0x880(%rbp), %rdi
leaq 0xf725(%rip), %rsi      # 0x163e4
leaq -0x178(%rbp), %rdx
movsd 0xf342(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6cd5
movq -0x888(%rbp), %rax
movq -0x880(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1e0(%rbp), %rax
movq %rax, -0x898(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x890(%rbp)
jmp 0x6d07
movq -0x890(%rbp), %rdi
leaq 0xf6d5(%rip), %rsi      # 0x163ea
leaq -0x180(%rbp), %rdx
movsd 0xf2ec(%rip), %xmm0     # 0x16010
callq 0x11c00
jmp 0x6d2b
movq -0x898(%rbp), %rax
movq -0x890(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1d8(%rbp), %rax
movq %rax, -0x8a8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x8a0(%rbp)
jmp 0x6d5d
movq -0x8a0(%rbp), %rdi
leaq 0xf685(%rip), %rsi      # 0x163f0
leaq -0x1b0(%rbp), %rdx
movsd 0xf2a6(%rip), %xmm0     # 0x16020
callq 0x11c00
jmp 0x6d81
movq -0x8a8(%rbp), %rax
movq -0x8a0(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x1d0(%rbp), %rax
movq %rax, -0x8b8(%rbp)
movl $0x20, %edi
callq 0x52a0
movq %rax, -0x8b0(%rbp)
jmp 0x6db3
movq -0x8b0(%rbp), %rdi
leaq 0xf638(%rip), %rsi      # 0x163f9
leaq -0x1a8(%rbp), %rdx
movsd 0xf248(%rip), %xmm0     # 0x16018
callq 0x11c00
jmp 0x6dd7
movq -0x8b8(%rbp), %rax
movq -0x8b0(%rbp), %rcx
movq %rcx, (%rax)
movq $0x0, -0x1c8(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x398(%rbp)
movl -0x8(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x8(%rbp)
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x10(%rbp)
cmpl $0x1, -0x8(%rbp)
jne 0x7761
movq -0x10(%rbp), %rax
movq (%rax), %rdi
leaq 0xf5d4(%rip), %rsi      # 0x16402
callq 0x5330
cmpl $0x0, %eax
jne 0x7761
movq 0x1719d(%rip), %rax     # 0x1dfe0
movq (%rax), %rdi
leaq 0xf5b8(%rip), %rsi      # 0x16405
leaq 0xf5ce(%rip), %rdx      # 0x16422
movb $0x0, %al
callq 0x5350
xorl %edi, %edi
callq 0x5300
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
jmp 0x7c80
movq -0x538(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x540(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x550(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x560(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x570(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x580(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x590(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x5a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x5b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x5c0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x5d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x5e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x5f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x600(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x610(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x620(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x630(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x640(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x650(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x660(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x670(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x680(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x690(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x6a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x6b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x6c0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x6d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x6e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x6f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x700(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x710(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x720(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x730(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x740(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x750(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x760(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x770(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x780(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x790(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x7a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x7b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x7c0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x7d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x7e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x7f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x800(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x810(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x820(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x18, %esi
callq 0x52b0
jmp 0x7c80
movq -0x830(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x840(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x850(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x860(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x870(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x880(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x890(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x8a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq -0x8b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
movl $0x20, %esi
callq 0x52b0
jmp 0x7c80
movq $0x0, -0x3a0(%rbp)
cmpl $0x0, -0x8(%rbp)
jle 0x789a
leaq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
leaq -0x390(%rbp), %rdx
callq 0x118d0
movl %eax, -0x8bc(%rbp)
jmp 0x7792
movl -0x8bc(%rbp), %eax
movl %eax, -0x3a4(%rbp)
cmpl $-0x1, -0x3a4(%rbp)
jne 0x77c1
movq 0x16a9a(%rip), %rdi     # 0x1e248
movq -0x398(%rbp), %rsi
callq 0x7d20
jmp 0x77bc
jmp 0x7880
cmpl $0x1, -0x3a4(%rbp)
je 0x787e
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0xaee0
movq %rax, -0x8c8(%rbp)
jmp 0x77e3
movq -0x8c8(%rbp), %rax
movq %rax, -0x3b0(%rbp)
cmpq $0x0, -0x3b0(%rbp)
jne 0x7831
movq 0x167de(%rip), %rax     # 0x1dfe0
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0xec16(%rip), %rsi      # 0x16429
xorl %eax, %eax
callq 0x5350
movq 0x16a27(%rip), %rdi     # 0x1e248
movq -0x398(%rbp), %rsi
callq 0x7d20
jmp 0x782f
jmp 0x787c
cmpq $0x0, -0x3a0(%rbp)
jne 0x784b
movq -0x3b0(%rbp), %rax
movq %rax, -0x3a0(%rbp)
jmp 0x787a
movq 0x1678e(%rip), %rax     # 0x1dfe0
movq (%rax), %rdi
leaq 0xebe5(%rip), %rsi      # 0x16441
xorl %eax, %eax
callq 0x5350
movq 0x169de(%rip), %rdi     # 0x1e248
movq -0x398(%rbp), %rsi
callq 0x7d20
jmp 0x7878
jmp 0x787a
jmp 0x787c
jmp 0x787e
jmp 0x7880
movl -0x8(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x8(%rbp)
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x10(%rbp)
jmp 0x776c
cmpq $0x0, -0x3a0(%rbp)
jne 0x78d3
movq 0x16735(%rip), %rax     # 0x1dfe0
movq (%rax), %rdi
leaq 0xebb2(%rip), %rsi      # 0x16467
xorl %eax, %eax
callq 0x5350
movq 0x16985(%rip), %rdi     # 0x1e248
movq -0x398(%rbp), %rsi
callq 0x7d20
jmp 0x78d1
jmp 0x78d3
movq -0x48(%rbp), %rsi
leaq -0x40(%rbp), %rdi
xorl %edx, %edx
callq 0x13f20
jmp 0x78e4
testb $0x1, -0x61(%rbp)
je 0x790d
movq -0x3a0(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
leaq -0x5c(%rbp), %rsi
leaq -0x60(%rbp), %rdx
leaq -0x158(%rbp), %rcx
callq *%rax
jmp 0x790b
jmp 0x790d
movslq -0x5c(%rbp), %rsi
movslq -0x60(%rbp), %rdx
leaq -0x3e0(%rbp), %rdi
callq 0x13bd0
jmp 0x7923
xorl %eax, %eax
movl %eax, %edx
leaq -0x410(%rbp), %rdi
movq %rdx, %rsi
callq 0x13bd0
jmp 0x7938
cmpq $0x0, -0x58(%rbp)
je 0x7983
movq -0x58(%rbp), %rsi
leaq -0x410(%rbp), %rdi
xorl %edx, %edx
callq 0x13f20
jmp 0x7953
jmp 0x7983
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
jmp 0x7c74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
jmp 0x7c68
movl $0x0, -0x414(%rbp)
movl -0x414(%rbp), %eax
cmpl -0x1b4(%rbp), %eax
jge 0x7c13
cmpq $0x0, -0x58(%rbp)
je 0x79c2
leaq -0x3e0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x13d70
jmp 0x79bb
movb $0x1, -0xc0(%rbp)
movq -0x3a0(%rbp), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq -0x158(%rbp), %rsi
callq *%rax
jmp 0x79db
testb $0x1, -0x1b5(%rbp)
je 0x7a09
movq -0x3a0(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x3e0(%rbp), %rdx
leaq -0x158(%rbp), %rcx
callq 0xa9b0
jmp 0x7a04
jmp 0x7aae
movq -0x3a0(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x3e0(%rbp), %rdx
leaq -0x158(%rbp), %rcx
callq 0xa6c0
jmp 0x7a29
movq -0x3a0(%rbp), %rax
movq %rax, -0x8d8(%rbp)
callq 0x7d70
movq %rax, -0x8d0(%rbp)
jmp 0x7a45
movq -0x8d0(%rbp), %rsi
leaq -0x430(%rbp), %rdi
callq 0x7d80
jmp 0x7a5a
movq -0x8d8(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
leaq -0x158(%rbp), %rdx
leaq -0x430(%rbp), %rcx
callq 0xe710
jmp 0x7a7d
leaq -0x430(%rbp), %rdi
callq 0x7e70
jmp 0x7aae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x160(%rbp)
movl %eax, -0x164(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x7e70
jmp 0x7c68
cmpl $0x1, -0x1b4(%rbp)
jle 0x7b13
movq -0x50(%rbp), %rdx
movl -0x414(%rbp), %ecx
leaq 0xe9c2(%rip), %rsi      # 0x1648a
xorl %eax, %eax
leaq -0x530(%rbp), %rdi
movq %rdi, -0x8e0(%rbp)
callq 0x5070
movq -0x8e0(%rbp), %rsi
leaq -0x3e0(%rbp), %rdi
callq 0x142c0
jmp 0x7af2
movq 0x164e7(%rip), %rax     # 0x1dfe0
movq (%rax), %rdi
leaq -0x530(%rbp), %rdx
leaq 0xe98b(%rip), %rsi      # 0x16495
movb $0x0, %al
callq 0x5350
jmp 0x7b27
movq -0x50(%rbp), %rsi
leaq -0x3e0(%rbp), %rdi
callq 0x142c0
jmp 0x7b25
jmp 0x7b27
movsd -0x188(%rbp), %xmm0
addsd -0x150(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x190(%rbp), %xmm0
addsd -0x158(%rbp), %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x198(%rbp), %xmm0
addsd -0x140(%rbp), %xmm0
movsd %xmm0, -0x140(%rbp)
movsd -0x1a0(%rbp), %xmm0
addsd -0x138(%rbp), %xmm0
movsd %xmm0, -0x138(%rbp)
movsd -0x170(%rbp), %xmm0
addsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x110(%rbp)
movsd -0x178(%rbp), %xmm0
addsd -0x108(%rbp), %xmm0
movsd %xmm0, -0x108(%rbp)
movsd -0x180(%rbp), %xmm0
addsd -0x100(%rbp), %xmm0
movsd %xmm0, -0x100(%rbp)
movsd -0x1a8(%rbp), %xmm0
addsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x1b0(%rbp), %xmm0
addsd -0xc8(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
movl -0x414(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x414(%rbp)
jmp 0x798d
movq -0x3a0(%rbp), %rax
movq %rax, -0x8e8(%rbp)
cmpq $0x0, %rax
je 0x7c34
movq -0x8e8(%rbp), %rdi
movq (%rdi), %rax
callq *0x40(%rax)
movl $0x0, -0x4(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x13c90
leaq -0x3e0(%rbp), %rdi
callq 0x13c90
leaq -0x40(%rbp), %rdi
callq 0x13c90
movl -0x4(%rbp), %eax
addq $0x8f0, %rsp            # imm = 0x8F0
popq %rbp
retq
leaq -0x410(%rbp), %rdi
callq 0x13c90
leaq -0x3e0(%rbp), %rdi
callq 0x13c90
leaq -0x40(%rbp), %rdi
callq 0x13c90
movq -0x160(%rbp), %rdi
callq 0x53f0
nopw %cs:(%rax,%rax)
nop