// File: srajangarg[P]raytracer/src/core/SceneLoader.cpp
// Function: SceneLoader::doI(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
SceneInstance * SceneLoader::doI(istream & str, string & name)
{
  name = getString(str);

  if (name.empty())
  {
    *err << "Couldn't read instance name at ";
    errLine(str.tellg());
    return NULL;
  }

  string var = getString(str);

  if (groups[var] == NULL)
  {
    *err << "Instancing node " << var << " which doesn't exist yet at ";
    curPos(*err, str.tellg());
    *err << endl;
    return NULL;
  }

  SceneInstance * n = new SceneInstance();
  instances.push_back(n); //nodes[name] = n;
  n->name_ = name;
  n->child_ = groups[var];

  do
  {
    int state = findOpenOrClosedParen(str);

    if (state == ERROR)
      return NULL;
    else if (state == CLOSED)
      return n;
    else if (state == OPEN)
    {
      string cmd;
      vector<ParametricValue *> values;

      if (readCommand(str, cmd))
      {
        if (cmd == "R") // load rotations
        {
          int numv = getValues(str, values);
          Rotate * r = NULL;

          if (numv < 1)
          {
            *err << "R with no args at ";
            errLine(str.tellg());
          }
          else if (numv < 4)
          {
            cleanAfter(values, 1);
            r = new Rotate();
            r->angle = values[0];
          }
          else
          {
            cleanAfter(values, 4);
            r = new Rotate();
            r->angle = values[0];

            for (int i = 0; i < 3; i++)
              r->axis[i] = values[i + 1];
          }

          if (r != NULL)
            n->transforms_.push_back(r);
        }
        else if (cmd == "Xform")
        {
          int numv = getValues(str, values);
          GeneralTransform * g = NULL;

          if (numv < 9)
          {
            *err << "Xform with too few parameters at ";
            errLine(str.tellg());
          }
          else if (numv < 16)     // 2d
          {
            cleanAfter(values, 9);
            g = new GeneralTransform();

            for (int i = 0; i < 9; i++)
              g->matrix.push_back(values[i]);
          }
          else
          {
            cleanAfter(values, 16);
            g = new GeneralTransform();

            for (int i = 0; i < 16; i++)
              g->matrix.push_back(values[i]);
          }

          if (g != NULL)
            n->transforms_.push_back(g);
        }
        else if (cmd == "T")
        {
          int numv = getValues(str, values);
          Translate * t = NULL;

          if (numv < 2)
          {
            *err << "T with too few parameters at ";
            errLine(str.tellg());
          }
          else if (numv == 2)
          {
            t = new Translate();

            for (int i = 0; i < 2; i++)
              t->translate[i] = values[i];
          }
          else
          {
            cleanAfter(values, 3);
            t = new Translate();

            for (int i = 0; i < 3; i++)
              t->translate[i] = values[i];
          }

          if (t != NULL)
            n->transforms_.push_back(t);
        }
        else if (cmd == "S")
        {
          int numv = getValues(str, values);
          Scale * s = NULL;

          if (numv < 2)
          {
            *err << "S with too few parameters at ";
            errLine(str.tellg());
          }
          else if (numv == 2)
          {
            s = new Scale();

            for (int i = 0; i < 2; i++)
              s->scale[i] = values[i];
          }
          else
          {
            s = new Scale();

            for (int i = 0; i < 3; i++)
              s->scale[i] = values[i];
          }

          if (s != NULL)
            n->transforms_.push_back(s);
        }
        else if (cmd == "color")
        {
          int numv = getValues(str, values);
          ParametricColor * c = NULL;

          if (numv < 3)
          {
            *err << "color with too few parameters at ";
            errLine(str.tellg());
          }
          else
          {
            cleanAfter(values, 3);
            c = new ParametricColor();

            for (int i = 0; i < 3; i++)
              c->color_[i] = values[i];
          }

          if (c != NULL)
            n->color_ = c;
        }
        else if (cmd == "lod")
        {
          int numv = getValues(str, values);
          LOD * l = NULL;

          if (numv < 1)
          {
            *err << "lod with no parameters at ";
            errLine(str.tellg());
          }
          else
          {
            //cout << "got lod" << endl;
            cleanAfter(values, 1);
            l = new LOD();
            l->level_ = values[0];
          }

          if (l != NULL)
            n->lod_ = l;
        }
        else
        {
          *err << "Error: command " << cmd << " not recognized at ";
          curPos(*err, str.tellg());
          *err << endl;
        }

        findCloseParen(str);
      }
    }
  }
  while (true);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3b0, %rsp            # imm = 0x3B0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rsi
movq %rsi, -0x1f8(%rbp)
movq -0x18(%rbp), %rdx
leaq -0x40(%rbp), %rdi
callq 0xcaa0
movq -0x20(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x54d0
leaq -0x40(%rbp), %rdi
callq 0x5290
movq -0x20(%rbp), %rdi
callq 0x5690
testb $0x1, %al
jne 0xd9f4
jmp 0xda43
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x398ad(%rip), %rsi     # 0x472b6
callq 0x53e0
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rax, -0x50(%rbp)
movq %rdx, -0x48(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x12bc0
movq -0x1f8(%rbp), %rdi
movl %eax, %esi
callq 0xd8e0
movq $0x0, -0x8(%rbp)
jmp 0xec3b
movq -0x1f8(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x70(%rbp), %rdi
movq %rdi, -0x208(%rbp)
callq 0xcaa0
movq -0x1f8(%rbp), %rdi
movq -0x208(%rbp), %rsi
addq $0x18, %rdi
callq 0x12fe0
movq %rax, -0x200(%rbp)
jmp 0xda7e
movq -0x200(%rbp), %rax
cmpq $0x0, (%rax)
jne 0xdba1
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x39832(%rip), %rsi     # 0x472d6
callq 0x53e0
movq %rax, -0x210(%rbp)
jmp 0xdab2
movq -0x210(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x53c0
movq %rax, -0x218(%rbp)
jmp 0xdacb
movq -0x218(%rbp), %rdi
leaq 0x3980e(%rip), %rsi     # 0x472e7
callq 0x53e0
jmp 0xdae0
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rax
movq %rax, -0x230(%rbp)
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x228(%rbp)
movq %rax, -0x220(%rbp)
jmp 0xdb0e
movq -0x228(%rbp), %rax
movq -0x220(%rbp), %rcx
movq %rcx, -0x90(%rbp)
movq %rax, -0x88(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x238(%rbp)
jmp 0xdb3f
movq -0x230(%rbp), %rsi
movq -0x1f8(%rbp), %rdi
movq -0x238(%rbp), %rax
movl %eax, %edx
callq 0xc990
jmp 0xdb5d
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
movq 0x4e43e(%rip), %rsi     # 0x5bfb0
callq 0x5440
jmp 0xdb79
movq $0x0, -0x8(%rbp)
movl $0x1, -0x94(%rbp)
jmp 0xec25
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xec30
movl $0x58, %edi
callq 0x5400
movq %rax, -0x240(%rbp)
jmp 0xdbb4
movq -0x240(%rbp), %rdi
callq 0x99b0
jmp 0xdbc2
movq -0x1f8(%rbp), %rdi
movq -0x240(%rbp), %rax
movq %rax, -0xa0(%rbp)
addq $0x78, %rdi
leaq -0xa0(%rbp), %rsi
callq 0x130c0
jmp 0xdbe9
movq -0x20(%rbp), %rsi
movq -0xa0(%rbp), %rdi
addq $0x8, %rdi
callq 0x5070
jmp 0xdbff
movq -0x1f8(%rbp), %rdi
addq $0x18, %rdi
leaq -0x70(%rbp), %rsi
callq 0x12fe0
movq %rax, -0x248(%rbp)
jmp 0xdc1c
movq -0x248(%rbp), %rax
movq (%rax), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xd050
movl %eax, -0x24c(%rbp)
jmp 0xdc49
movl -0x24c(%rbp), %eax
movl %eax, -0xa4(%rbp)
cmpl $0x2, -0xa4(%rbp)
jne 0xdc97
movq $0x0, -0x8(%rbp)
movl $0x1, -0x94(%rbp)
jmp 0xec25
movq -0x240(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x58, %esi
callq 0x5410
jmp 0xec30
cmpl $0x1, -0xa4(%rbp)
jne 0xdcba
movq -0xa0(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0x94(%rbp)
jmp 0xec25
cmpl $0x0, -0xa4(%rbp)
jne 0xec11
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x55a0
leaq -0xe0(%rbp), %rdi
callq 0x13130
movq -0x1f8(%rbp), %rdi
movq -0x258(%rbp), %rdx
movq -0x18(%rbp), %rsi
callq 0xcdc0
movb %al, -0x24d(%rbp)
jmp 0xdd05
movb -0x24d(%rbp), %al
testb $0x1, %al
jne 0xdd14
jmp 0xebdd
leaq 0x3a8b2(%rip), %rsi     # 0x485cd
leaq -0xc8(%rbp), %rdi
callq 0x64f0
movb %al, -0x259(%rbp)
jmp 0xdd2f
movb -0x259(%rbp), %al
testb $0x1, %al
jne 0xdd3e
jmp 0xdfc2
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xd330
movl %eax, -0x260(%rbp)
jmp 0xdd5d
movl -0x260(%rbp), %eax
movl %eax, -0xe4(%rbp)
movq $0x0, -0xf0(%rbp)
cmpl $0x1, -0xe4(%rbp)
jge 0xde14
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x3956e(%rip), %rsi     # 0x47304
callq 0x53e0
jmp 0xdd9d
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x270(%rbp)
movq %rax, -0x268(%rbp)
jmp 0xddb6
movq -0x270(%rbp), %rax
movq -0x268(%rbp), %rcx
movq %rcx, -0x100(%rbp)
movq %rax, -0xf8(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x278(%rbp)
jmp 0xdde7
movq -0x1f8(%rbp), %rdi
movq -0x278(%rbp), %rax
movl %eax, %esi
callq 0xd8e0
jmp 0xddfe
jmp 0xdf8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xebf7
cmpl $0x4, -0xe4(%rbp)
jge 0xdead
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x1, %edx
callq 0xd930
movl $0x28, %edi
callq 0x5400
movq %rax, -0x280(%rbp)
jmp 0xde4c
movq -0x280(%rbp), %rdi
callq 0x13150
jmp 0xde5a
movq -0x280(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12fc0
movq (%rax), %rcx
movq -0xf0(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0xdf88
movq -0x280(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x28, %esi
callq 0x5410
jmp 0xebf7
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x4, %edx
callq 0xd930
movl $0x28, %edi
callq 0x5400
movq %rax, -0x288(%rbp)
jmp 0xded8
movq -0x288(%rbp), %rdi
callq 0x13150
jmp 0xdee6
movq -0x288(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12fc0
movq (%rax), %rcx
movq -0xf0(%rbp), %rax
movq %rcx, 0x8(%rax)
movl $0x0, -0x104(%rbp)
cmpl $0x3, -0x104(%rbp)
jge 0xdf86
movl -0x104(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq (%rax), %rdx
movq -0xf0(%rbp), %rax
movslq -0x104(%rbp), %rcx
movq %rdx, 0x10(%rax,%rcx,8)
movl -0x104(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x104(%rbp)
jmp 0xdf1c
movq -0x288(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x28, %esi
callq 0x5410
jmp 0xebf7
jmp 0xdf88
jmp 0xdf8a
cmpq $0x0, -0xf0(%rbp)
je 0xdfbd
movq -0xa0(%rbp), %rdi
addq $0x28, %rdi
movq -0xf0(%rbp), %rax
movq %rax, -0x110(%rbp)
leaq -0x110(%rbp), %rsi
callq 0x131c0
jmp 0xdfbb
jmp 0xdfbd
jmp 0xebc9
leaq 0x3934e(%rip), %rsi     # 0x47317
leaq -0xc8(%rbp), %rdi
callq 0x64f0
movb %al, -0x289(%rbp)
jmp 0xdfdd
movb -0x289(%rbp), %al
testb $0x1, %al
jne 0xdfec
jmp 0xe267
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xd330
movl %eax, -0x290(%rbp)
jmp 0xe00b
movl -0x290(%rbp), %eax
movl %eax, -0x114(%rbp)
movq $0x0, -0x120(%rbp)
cmpl $0x9, -0x114(%rbp)
jge 0xe0b1
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x392d9(%rip), %rsi     # 0x4731d
callq 0x53e0
jmp 0xe04b
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x2a0(%rbp)
movq %rax, -0x298(%rbp)
jmp 0xe064
movq -0x2a0(%rbp), %rax
movq -0x298(%rbp), %rcx
movq %rcx, -0x130(%rbp)
movq %rax, -0x128(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x2a8(%rbp)
jmp 0xe095
movq -0x1f8(%rbp), %rdi
movq -0x2a8(%rbp), %rax
movl %eax, %esi
callq 0xd8e0
jmp 0xe0ac
jmp 0xe22f
cmpl $0x10, -0x114(%rbp)
jge 0xe177
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x9, %edx
callq 0xd930
movl $0x20, %edi
callq 0x5400
movq %rax, -0x2b0(%rbp)
jmp 0xe0e9
movq -0x2b0(%rbp), %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x5230
movq -0x2b0(%rbp), %rdi
callq 0x131f0
movq -0x2b0(%rbp), %rax
movq %rax, -0x120(%rbp)
movl $0x0, -0x134(%rbp)
cmpl $0x9, -0x134(%rbp)
jge 0xe172
movq -0x120(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x2b8(%rbp)
movslq -0x134(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq -0x2b8(%rbp), %rdi
movq %rax, %rsi
callq 0x12cc0
jmp 0xe15f
jmp 0xe161
movl -0x134(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x134(%rbp)
jmp 0xe120
jmp 0xe22d
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x10, %edx
callq 0xd930
movl $0x20, %edi
callq 0x5400
movq %rax, -0x2c0(%rbp)
jmp 0xe1a2
movq -0x2c0(%rbp), %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x5230
movq -0x2c0(%rbp), %rdi
callq 0x131f0
movq -0x2c0(%rbp), %rax
movq %rax, -0x120(%rbp)
movl $0x0, -0x138(%rbp)
cmpl $0x10, -0x138(%rbp)
jge 0xe22b
movq -0x120(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x2c8(%rbp)
movslq -0x138(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq -0x2c8(%rbp), %rdi
movq %rax, %rsi
callq 0x12cc0
jmp 0xe218
jmp 0xe21a
movl -0x138(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x138(%rbp)
jmp 0xe1d9
jmp 0xe22d
jmp 0xe22f
cmpq $0x0, -0x120(%rbp)
je 0xe262
movq -0xa0(%rbp), %rdi
addq $0x28, %rdi
movq -0x120(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x140(%rbp), %rsi
callq 0x131c0
jmp 0xe260
jmp 0xe262
jmp 0xebc7
leaq 0x3a012(%rip), %rsi     # 0x48280
leaq -0xc8(%rbp), %rdi
callq 0x64f0
movb %al, -0x2c9(%rbp)
jmp 0xe282
movb -0x2c9(%rbp), %al
testb $0x1, %al
jne 0xe291
jmp 0xe4f8
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xd330
movl %eax, -0x2d0(%rbp)
jmp 0xe2b0
movl -0x2d0(%rbp), %eax
movl %eax, -0x144(%rbp)
movq $0x0, -0x150(%rbp)
cmpl $0x2, -0x144(%rbp)
jge 0xe356
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x39056(%rip), %rsi     # 0x4733f
callq 0x53e0
jmp 0xe2f0
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x2e0(%rbp)
movq %rax, -0x2d8(%rbp)
jmp 0xe309
movq -0x2e0(%rbp), %rax
movq -0x2d8(%rbp), %rcx
movq %rcx, -0x160(%rbp)
movq %rax, -0x158(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x2e8(%rbp)
jmp 0xe33a
movq -0x1f8(%rbp), %rdi
movq -0x2e8(%rbp), %rax
movl %eax, %esi
callq 0xd8e0
jmp 0xe351
jmp 0xe4c0
cmpl $0x2, -0x144(%rbp)
jne 0xe406
movl $0x20, %edi
callq 0x5400
movq %rax, -0x2f0(%rbp)
jmp 0xe376
movq -0x2f0(%rbp), %rdi
callq 0x13230
jmp 0xe384
movq -0x2f0(%rbp), %rax
movq %rax, -0x150(%rbp)
movl $0x0, -0x164(%rbp)
cmpl $0x2, -0x164(%rbp)
jge 0xe401
movslq -0x164(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq (%rax), %rdx
movq -0x150(%rbp), %rax
movslq -0x164(%rbp), %rcx
movq %rdx, 0x8(%rax,%rcx,8)
movl -0x164(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x164(%rbp)
jmp 0xe39c
movq -0x2f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x20, %esi
callq 0x5410
jmp 0xebf7
jmp 0xe4be
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x3, %edx
callq 0xd930
movl $0x20, %edi
callq 0x5400
movq %rax, -0x2f8(%rbp)
jmp 0xe431
movq -0x2f8(%rbp), %rdi
callq 0x13230
jmp 0xe43f
movq -0x2f8(%rbp), %rax
movq %rax, -0x150(%rbp)
movl $0x0, -0x168(%rbp)
cmpl $0x3, -0x168(%rbp)
jge 0xe4bc
movslq -0x168(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq (%rax), %rdx
movq -0x150(%rbp), %rax
movslq -0x168(%rbp), %rcx
movq %rdx, 0x8(%rax,%rcx,8)
movl -0x168(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x168(%rbp)
jmp 0xe457
movq -0x2f8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x20, %esi
callq 0x5410
jmp 0xebf7
jmp 0xe4be
jmp 0xe4c0
cmpq $0x0, -0x150(%rbp)
je 0xe4f3
movq -0xa0(%rbp), %rdi
addq $0x28, %rdi
movq -0x150(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0x170(%rbp), %rsi
callq 0x131c0
jmp 0xe4f1
jmp 0xe4f3
jmp 0xebc5
leaq 0x39b51(%rip), %rsi     # 0x48050
leaq -0xc8(%rbp), %rdi
callq 0x64f0
movb %al, -0x2f9(%rbp)
jmp 0xe513
movb -0x2f9(%rbp), %al
testb $0x1, %al
jne 0xe522
jmp 0xe771
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xd330
movl %eax, -0x300(%rbp)
jmp 0xe541
movl -0x300(%rbp), %eax
movl %eax, -0x174(%rbp)
movq $0x0, -0x180(%rbp)
cmpl $0x2, -0x174(%rbp)
jge 0xe5e7
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x38de3(%rip), %rsi     # 0x4735d
callq 0x53e0
jmp 0xe581
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x310(%rbp)
movq %rax, -0x308(%rbp)
jmp 0xe59a
movq -0x310(%rbp), %rax
movq -0x308(%rbp), %rcx
movq %rcx, -0x190(%rbp)
movq %rax, -0x188(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x318(%rbp)
jmp 0xe5cb
movq -0x1f8(%rbp), %rdi
movq -0x318(%rbp), %rax
movl %eax, %esi
callq 0xd8e0
jmp 0xe5e2
jmp 0xe739
cmpl $0x2, -0x174(%rbp)
jne 0xe697
movl $0x20, %edi
callq 0x5400
movq %rax, -0x320(%rbp)
jmp 0xe607
movq -0x320(%rbp), %rdi
callq 0x13290
jmp 0xe615
movq -0x320(%rbp), %rax
movq %rax, -0x180(%rbp)
movl $0x0, -0x194(%rbp)
cmpl $0x2, -0x194(%rbp)
jge 0xe692
movslq -0x194(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq (%rax), %rdx
movq -0x180(%rbp), %rax
movslq -0x194(%rbp), %rcx
movq %rdx, 0x8(%rax,%rcx,8)
movl -0x194(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x194(%rbp)
jmp 0xe62d
movq -0x320(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x20, %esi
callq 0x5410
jmp 0xebf7
jmp 0xe737
movl $0x20, %edi
callq 0x5400
movq %rax, -0x328(%rbp)
jmp 0xe6aa
movq -0x328(%rbp), %rdi
callq 0x13290
jmp 0xe6b8
movq -0x328(%rbp), %rax
movq %rax, -0x180(%rbp)
movl $0x0, -0x198(%rbp)
cmpl $0x3, -0x198(%rbp)
jge 0xe735
movslq -0x198(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq (%rax), %rdx
movq -0x180(%rbp), %rax
movslq -0x198(%rbp), %rcx
movq %rdx, 0x8(%rax,%rcx,8)
movl -0x198(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x198(%rbp)
jmp 0xe6d0
movq -0x328(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x20, %esi
callq 0x5410
jmp 0xebf7
jmp 0xe737
jmp 0xe739
cmpq $0x0, -0x180(%rbp)
je 0xe76c
movq -0xa0(%rbp), %rdi
addq $0x28, %rdi
movq -0x180(%rbp), %rax
movq %rax, -0x1a0(%rbp)
leaq -0x1a0(%rbp), %rsi
callq 0x131c0
jmp 0xe76a
jmp 0xe76c
jmp 0xebc3
leaq 0x38c03(%rip), %rsi     # 0x4737b
leaq -0xc8(%rbp), %rdi
callq 0x64f0
movb %al, -0x329(%rbp)
jmp 0xe78c
movb -0x329(%rbp), %al
testb $0x1, %al
jne 0xe79b
jmp 0xe938
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xd330
movl %eax, -0x330(%rbp)
jmp 0xe7ba
movl -0x330(%rbp), %eax
movl %eax, -0x1a4(%rbp)
movq $0x0, -0x1b0(%rbp)
cmpl $0x3, -0x1a4(%rbp)
jge 0xe860
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x38b8e(%rip), %rsi     # 0x47381
callq 0x53e0
jmp 0xe7fa
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x340(%rbp)
movq %rax, -0x338(%rbp)
jmp 0xe813
movq -0x340(%rbp), %rax
movq -0x338(%rbp), %rcx
movq %rcx, -0x1c0(%rbp)
movq %rax, -0x1b8(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x348(%rbp)
jmp 0xe844
movq -0x1f8(%rbp), %rdi
movq -0x348(%rbp), %rax
movl %eax, %esi
callq 0xd8e0
jmp 0xe85b
jmp 0xe917
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x3, %edx
callq 0xd930
movl $0x18, %edi
callq 0x5400
movq %rax, -0x350(%rbp)
jmp 0xe88b
movq -0x350(%rbp), %rdi
callq 0x132f0
jmp 0xe899
movq -0x350(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movl $0x0, -0x1c4(%rbp)
cmpl $0x3, -0x1c4(%rbp)
jge 0xe915
movslq -0x1c4(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x12fc0
movq (%rax), %rdx
movq -0x1b0(%rbp), %rax
movslq -0x1c4(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x1c4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c4(%rbp)
jmp 0xe8b1
movq -0x350(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x18, %esi
callq 0x5410
jmp 0xebf7
jmp 0xe917
cmpq $0x0, -0x1b0(%rbp)
je 0xe933
movq -0x1b0(%rbp), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x40(%rax)
jmp 0xebc1
leaq 0x38a64(%rip), %rsi     # 0x473a3
leaq -0xc8(%rbp), %rdi
callq 0x64f0
movb %al, -0x351(%rbp)
jmp 0xe953
movb -0x351(%rbp), %al
testb $0x1, %al
jne 0xe962
jmp 0xead0
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
callq 0xd330
movl %eax, -0x358(%rbp)
jmp 0xe981
movl -0x358(%rbp), %eax
movl %eax, -0x1c8(%rbp)
movq $0x0, -0x1d0(%rbp)
cmpl $0x1, -0x1c8(%rbp)
jge 0xea27
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x389ed(%rip), %rsi     # 0x473a7
callq 0x53e0
jmp 0xe9c1
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x368(%rbp)
movq %rax, -0x360(%rbp)
jmp 0xe9da
movq -0x368(%rbp), %rax
movq -0x360(%rbp), %rcx
movq %rcx, -0x1e0(%rbp)
movq %rax, -0x1d8(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x370(%rbp)
jmp 0xea0b
movq -0x1f8(%rbp), %rdi
movq -0x370(%rbp), %rax
movl %eax, %esi
callq 0xd8e0
jmp 0xea22
jmp 0xeaaf
movq -0x1f8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x1, %edx
callq 0xd930
movl $0x8, %edi
callq 0x5400
movq %rax, -0x378(%rbp)
jmp 0xea52
movq -0x378(%rbp), %rdi
callq 0x13330
jmp 0xea60
movq -0x378(%rbp), %rax
movq %rax, -0x1d0(%rbp)
leaq -0xe0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12fc0
movq (%rax), %rcx
movq -0x1d0(%rbp), %rax
movq %rcx, (%rax)
jmp 0xeaaf
movq -0x378(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x8, %esi
callq 0x5410
jmp 0xebf7
cmpq $0x0, -0x1d0(%rbp)
je 0xeacb
movq -0x1d0(%rbp), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x48(%rax)
jmp 0xebbf
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
leaq 0x388dd(%rip), %rsi     # 0x473c2
callq 0x53e0
movq %rax, -0x380(%rbp)
jmp 0xeaf3
movq -0x380(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x53c0
movq %rax, -0x388(%rbp)
jmp 0xeb0f
movq -0x388(%rbp), %rdi
leaq 0x388b5(%rip), %rsi     # 0x473d2
callq 0x53e0
jmp 0xeb24
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rax
movq %rax, -0x3a0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x5700
movq %rdx, -0x398(%rbp)
movq %rax, -0x390(%rbp)
jmp 0xeb52
movq -0x398(%rbp), %rax
movq -0x390(%rbp), %rcx
movq %rcx, -0x1f0(%rbp)
movq %rax, -0x1e8(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x12bc0
movq %rax, -0x3a8(%rbp)
jmp 0xeb83
movq -0x3a0(%rbp), %rsi
movq -0x1f8(%rbp), %rdi
movq -0x3a8(%rbp), %rax
movl %eax, %edx
callq 0xc990
jmp 0xeba1
movq -0x1f8(%rbp), %rax
movq 0x90(%rax), %rdi
movq 0x4d3fa(%rip), %rsi     # 0x5bfb0
callq 0x5440
jmp 0xebbd
jmp 0xebbf
jmp 0xebc1
jmp 0xebc3
jmp 0xebc5
jmp 0xebc7
jmp 0xebc9
movq -0x1f8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xd240
jmp 0xebdb
jmp 0xebdd
leaq -0xe0(%rbp), %rdi
callq 0x13350
leaq -0xc8(%rbp), %rdi
callq 0x5290
jmp 0xec11
leaq -0xe0(%rbp), %rdi
callq 0x13350
leaq -0xc8(%rbp), %rdi
callq 0x5290
jmp 0xec30
jmp 0xec13
jmp 0xec15
jmp 0xec17
movb $0x1, %al
testb $0x1, %al
jne 0xdc31
jmp 0xec23
ud2
leaq -0x70(%rbp), %rdi
callq 0x5290
jmp 0xec3b
leaq -0x70(%rbp), %rdi
callq 0x5290
jmp 0xec48
movq -0x8(%rbp), %rax
addq $0x3b0, %rsp            # imm = 0x3B0
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x5720
nopw %cs:(%rax,%rax)