
/* std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > std::money_put<wchar_t,
   std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >
   >::_M_insert<true>(std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, std::ios_base&,
   wchar_t, std::wstring const&) const */

undefined1  [16]
std::money_put<wchar_t,std::ostreambuf_iterator<wchar_t,std::char_traits<wchar_t>>>::_M_insert<true>
          (undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,
          undefined8 *param_6)

{
  long *plVar1;
  wchar_t wVar2;
  char *pcVar3;
  int iVar4;
  ctype *pcVar5;
  ulong uVar6;
  long lVar7;
  wchar_t *pwVar8;
  long lVar9;
  __moneypunct_cache<wchar_t,true> *this;
  bool bVar10;
  ulong uVar11;
  wchar_t **ppwVar12;
  ulong uVar13;
  uint uVar14;
  ulong uVar15;
  wchar_t *pwVar16;
  undefined1 auVar17 [16];
  char local_9d;
  wchar_t *local_90;
  ulong local_78;
  undefined1 local_4c [4];
  wchar_t *local_48;
  undefined *local_40 [2];
  
  local_9d = (char)param_3;
  pcVar5 = use_facet<std::ctype<wchar_t>>((locale *)(param_4 + 0xd0));
  uVar6 = locale::id::_M_id((id *)&moneypunct<wchar_t,true>::id);
  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8);
  lVar9 = *plVar1;
  if (lVar9 == 0) {
                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */
    this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0);
    *(undefined4 *)(this + 8) = 0;
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0;
    *(undefined ***)this = &PTR____moneypunct_cache_00679350;
    *(undefined8 *)(this + 0x24) = 0;
    *(undefined8 *)(this + 0x30) = 0;
    *(undefined8 *)(this + 0x38) = 0;
    *(undefined8 *)(this + 0x40) = 0;
    *(undefined8 *)(this + 0x48) = 0;
    *(undefined8 *)(this + 0x50) = 0;
    *(undefined8 *)(this + 0x58) = 0;
    *(undefined8 *)(this + 0x60) = 0;
    *(undefined4 *)(this + 0x68) = 0;
    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0;
                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */
    __moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0));
    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);
    lVar9 = *plVar1;
  }
  pwVar8 = (wchar_t *)*param_6;
  pwVar16 = pwVar8;
  if (*pwVar8 == *(wchar_t *)(lVar9 + 0x6c)) {
    local_4c = *(undefined1 (*) [4])(lVar9 + 0x68);
    local_90 = *(wchar_t **)(lVar9 + 0x50);
    uVar6 = *(ulong *)(lVar9 + 0x58);
    if (*(long *)(pwVar8 + -6) != 0) {
      pwVar16 = pwVar8 + 1;
    }
  }
  else {
    local_4c = *(undefined1 (*) [4])(lVar9 + 100);
    local_90 = *(wchar_t **)(lVar9 + 0x40);
    uVar6 = *(ulong *)(lVar9 + 0x48);
  }
  lVar7 = (**(code **)(*(long *)pcVar5 + 0x28))
                    (pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6));
  uVar15 = lVar7 - (long)pwVar16 >> 2;
  if (uVar15 != 0) {
    local_48 = (wchar_t *)&DAT_0068b618;
                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */
    std::wstring::reserve((wstring *)&local_48,uVar15 * 2);
    iVar4 = *(int *)(lVar9 + 0x60);
    uVar11 = uVar15 - (long)iVar4;
    if (0 < (long)uVar11) {
      if (iVar4 < 0) {
        uVar11 = uVar15;
      }
      if (*(long *)(lVar9 + 0x18) == 0) {
                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */
        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);
      }
      else {
        std::wstring::_M_replace_aux
                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');
        uVar13 = *(ulong *)(lVar9 + 0x18);
        pcVar3 = *(char **)(lVar9 + 0x10);
        wVar2 = *(wchar_t *)(lVar9 + 0x28);
        if (L'\xffffffff' < local_48[-2]) {
          std::wstring::_M_leak_hard((wstring *)&local_48);
        }
        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);
        if (L'\xffffffff' < local_48[-2]) {
                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */
          std::wstring::_M_leak_hard((wstring *)&local_48);
        }
        uVar13 = (long)pwVar8 - (long)local_48 >> 2;
        if (*(ulong *)(local_48 + -6) < uVar13) {
                    /* WARNING: Subroutine does not return */
          __throw_out_of_range_fmt
                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",
                     uVar13);
        }
        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);
      }
      iVar4 = *(int *)(lVar9 + 0x60);
    }
    if (0 < iVar4) {
                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */
      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));
      if ((long)uVar11 < 0) {
        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));
        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);
      }
      else {
        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));
      }
    }
    uVar14 = *(uint *)(param_4 + 0x18) & 0xb0;
    local_78 = *(long *)(local_48 + -6) + uVar6;
    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {
      local_78 = local_78 + *(long *)(lVar9 + 0x38);
    }
    local_40[0] = &DAT_0068b618;
                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */
    std::wstring::reserve((wstring *)local_40,local_78 * 2);
    uVar15 = *(ulong *)(param_4 + 0x10);
    ppwVar12 = (wchar_t **)local_4c;
    bVar10 = uVar14 == 0x10 && local_78 < uVar15;
    do {
      switch(*(undefined1 *)ppwVar12) {
      case 0:
        if (bVar10) {
LAB_004ed01b:
          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);
        }
        break;
      case 1:
        if (bVar10) goto LAB_004ed01b;
                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */
        std::wstring::push_back((wstring *)local_40,param_5);
        break;
      case 2:
        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {
          std::wstring::append
                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));
        }
        break;
      case 3:
        if (uVar6 != 0) {
          std::wstring::push_back((wstring *)local_40,*local_90);
        }
        break;
      case 4:
        std::wstring::append((wstring *)local_40,(wstring *)&local_48);
      }
      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);
    } while (ppwVar12 != &local_48);
    if (1 < uVar6) {
      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);
    }
    uVar6 = *(ulong *)(local_40[0] + -0x18);
    if (uVar6 < uVar15) {
      if (uVar14 == 0x20) {
                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */
        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);
        uVar6 = uVar15;
      }
      else {
        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);
        uVar6 = uVar15;
      }
    }
    if (local_9d == '\0') {
      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);
      local_9d = (int)uVar6 != lVar9;
    }
    param_3 = param_3 & 0xffffffffffffff00;
    if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {
      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));
    }
    if ((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {
      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));
    }
  }
  auVar17._9_7_ = (int7)(param_3 >> 8);
  auVar17[8] = local_9d;
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar17._0_8_ = param_2;
  return auVar17;
}



undefined1  [16]
FUN_004ecd30(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,
            undefined8 *param_6)

{
  long *plVar1;
  undefined4 uVar2;
  int *piVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  bool bVar12;
  long lVar13;
  undefined **ppuVar14;
  ulong uVar15;
  ulong uVar16;
  uint uVar17;
  int *piVar18;
  undefined1 auVar19 [16];
  char local_9d;
  undefined4 *local_90;
  ulong local_78;
  undefined1 local_4d;
  undefined1 local_4c [4];
  undefined *local_48;
  undefined *local_40 [2];
  
  local_9d = (char)param_3;
  plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);
  lVar8 = FUN_004a0a70(&DAT_0068b4e8);
  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);
  lVar10 = *plVar1;
  if (lVar10 == 0) {
                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */
    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);
    *(undefined4 *)(puVar11 + 1) = 0;
    puVar11[2] = 0;
    puVar11[3] = 0;
    *(undefined1 *)(puVar11 + 4) = 0;
    *puVar11 = &PTR_FUN_00679350;
    *(undefined8 *)((long)puVar11 + 0x24) = 0;
    puVar11[6] = 0;
    puVar11[7] = 0;
    puVar11[8] = 0;
    puVar11[9] = 0;
    puVar11[10] = 0;
    puVar11[0xb] = 0;
    puVar11[0xc] = 0;
    *(undefined4 *)(puVar11 + 0xd) = 0;
    *(undefined1 *)(puVar11 + 0x13) = 0;
                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */
    FUN_004eb7d0(puVar11,param_4 + 0xd0);
    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);
    lVar10 = *plVar1;
  }
  piVar3 = (int *)*param_6;
  piVar18 = piVar3;
  if (*piVar3 == *(int *)(lVar10 + 0x6c)) {
    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);
    local_90 = *(undefined4 **)(lVar10 + 0x50);
    uVar15 = *(ulong *)(lVar10 + 0x58);
    if (*(long *)(piVar3 + -6) != 0) {
      piVar18 = piVar3 + 1;
    }
  }
  else {
    local_4c = *(undefined1 (*) [4])(lVar10 + 100);
    local_90 = *(undefined4 **)(lVar10 + 0x40);
    uVar15 = *(ulong *)(lVar10 + 0x48);
  }
  lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));
  lVar8 = lVar8 - (long)piVar18 >> 2;
  if (lVar8 != 0) {
    local_48 = &DAT_0068b618;
                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */
    FUN_0051a0b0(&local_48,lVar8 * 2);
    iVar6 = *(int *)(lVar10 + 0x60);
    lVar13 = lVar8 - iVar6;
    if (0 < lVar13) {
      if (iVar6 < 0) {
        lVar13 = lVar8;
      }
      if (*(long *)(lVar10 + 0x18) == 0) {
                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */
        FUN_00519bc0(&local_48,piVar18,lVar13);
      }
      else {
        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);
        uVar4 = *(undefined8 *)(lVar10 + 0x18);
        uVar5 = *(undefined8 *)(lVar10 + 0x10);
        uVar2 = *(undefined4 *)(lVar10 + 0x28);
        if (-1 < *(int *)(local_48 + -8)) {
          FUN_00519690(&local_48);
        }
        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);
        if (-1 < *(int *)(local_48 + -8)) {
                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */
          FUN_00519690(&local_48);
        }
        uVar16 = lVar9 - (long)local_48 >> 2;
        if (*(ulong *)(local_48 + -0x18) < uVar16) {
                    /* WARNING: Subroutine does not return */
          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",
                       "basic_string::erase",uVar16);
        }
        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);
      }
      iVar6 = *(int *)(lVar10 + 0x60);
    }
    if (0 < iVar6) {
                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */
      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));
      if (lVar13 < 0) {
        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));
        FUN_0051a320(&local_48,piVar18,lVar8);
      }
      else {
        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));
      }
    }
    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;
    local_78 = *(long *)(local_48 + -0x18) + uVar15;
    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {
      local_78 = local_78 + *(long *)(lVar10 + 0x38);
    }
    local_40[0] = &DAT_0068b618;
                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */
    FUN_0051a0b0(local_40,local_78 * 2);
    uVar16 = *(ulong *)(param_4 + 0x10);
    ppuVar14 = (undefined **)local_4c;
    bVar12 = uVar17 == 0x10 && local_78 < uVar16;
    do {
      switch(*(undefined1 *)ppuVar14) {
      case 0:
        if (bVar12) {
LAB_004ed01b:
          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);
        }
        break;
      case 1:
        if (bVar12) goto LAB_004ed01b;
                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */
        FUN_0051a5d0(local_40,param_5);
        break;
      case 2:
        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {
          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));
        }
        break;
      case 3:
        if (uVar15 != 0) {
          FUN_0051a5d0(local_40,*local_90);
        }
        break;
      case 4:
        FUN_0051a190(local_40,&local_48);
      }
      ppuVar14 = (undefined **)((long)ppuVar14 + 1);
    } while (ppuVar14 != &local_48);
    if (1 < uVar15) {
      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);
    }
    uVar15 = *(ulong *)(local_40[0] + -0x18);
    if (uVar15 < uVar16) {
      if (uVar17 == 0x20) {
                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */
        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);
        uVar15 = uVar16;
      }
      else {
        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);
        uVar15 = uVar16;
      }
    }
    if (local_9d == '\0') {
      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);
      local_9d = (int)uVar15 != lVar10;
    }
    param_3 = param_3 & 0xffffffffffffff00;
    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {
      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);
    }
    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {
      FUN_004e8ab0(local_48 + -0x18,&local_4d);
    }
  }
  auVar19._9_7_ = (int7)(param_3 >> 8);
  auVar19[8] = local_9d;
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar19._0_8_ = param_2;
  return auVar19;
}


PUSH R15
LEA RAX,[RCX + 0xd0]
MOV R15,RCX
PUSH R14
MOV RDI,RAX
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDX
SUB RSP,0x88
MOV qword ptr [RSP + 0x8],RSI
MOV qword ptr [RSP + 0x20],RDX
MOV dword ptr [RSP + 0x1c],R8D
MOV qword ptr [RSP + 0x10],R9
MOV byte ptr [RSP + 0x1b],DL
MOV qword ptr [RSP + 0x28],RAX
CALL 0x004eacf0
LEA RDI,[0x68b4e8]
MOV R12,RAX
CALL 0x004a0a70
MOV R14,RAX
MOV RAX,qword ptr [R15 + 0xd0]
MOV RAX,qword ptr [RAX + 0x18]
LEA R13,[RAX + R14*0x8]
MOV RBP,qword ptr [R13]
TEST RBP,RBP
JZ 0x004ed1c8
MOV RAX,qword ptr [RSP + 0x10]
MOV ECX,dword ptr [RBP + 0x6c]
MOV R13,qword ptr [RAX]
MOV RAX,qword ptr [R13 + -0x18]
CMP dword ptr [R13],ECX
JZ 0x004ece18
MOV EDX,dword ptr [RBP + 0x64]
MOV RCX,qword ptr [RBP + 0x40]
MOV R14,qword ptr [RBP + 0x48]
MOV dword ptr [RSP + 0x6c],EDX
MOV qword ptr [RSP + 0x28],RCX
LEA RCX,[R13 + RAX*0x4]
MOV RAX,qword ptr [R12]
MOV RDI,R12
MOV RDX,R13
MOV ESI,0x800
CALL qword ptr [RAX + 0x28]
SUB RAX,R13
MOV R12,RAX
SAR R12,0x2
JNZ 0x004ece40
MOV BL,byte ptr [RSP + 0x1b]
MOV qword ptr [R15 + 0x10],0x0
MOV RAX,qword ptr [RSP + 0x8]
ADD RSP,0x88
MOV RDX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDX,dword ptr [RBP + 0x68]
MOV RSI,qword ptr [RBP + 0x50]
TEST RAX,RAX
MOV R14,qword ptr [RBP + 0x58]
MOV dword ptr [RSP + 0x6c],EDX
LEA RDX,[R13 + 0x4]
MOV qword ptr [RSP + 0x28],RSI
CMOVNZ R13,RDX
JMP 0x004ecdca
LEA RAX,[0x68b600]
LEA RSI,[R12 + R12*0x1]
ADD RAX,0x18
MOV qword ptr [RSP + 0x70],RAX
LEA RAX,[RSP + 0x70]
MOV RDI,RAX
MOV qword ptr [RSP + 0x30],RAX
CALL 0x0051a0b0
MOVSXD RDX,dword ptr [RBP + 0x60]
MOV RBX,R12
SUB RBX,RDX
MOV RAX,RDX
TEST RBX,RBX
JLE 0x004ecf30
TEST EDX,EDX
CMOVS RBX,R12
CMP qword ptr [RBP + 0x18],0x0
JZ 0x004ed278
MOV RAX,qword ptr [RSP + 0x70]
MOV RDI,qword ptr [RSP + 0x30]
LEA RCX,[RBX + RBX*0x1]
XOR ESI,ESI
XOR R8D,R8D
MOV RDX,qword ptr [RAX + -0x18]
CALL 0x00519980
MOV RCX,qword ptr [RBP + 0x18]
MOV RDX,qword ptr [RBP + 0x10]
MOV RDI,qword ptr [RSP + 0x70]
MOV qword ptr [RSP + 0x10],RCX
MOV ECX,dword ptr [RBP + 0x28]
MOV qword ptr [RSP + 0x38],RDX
MOV dword ptr [RSP + 0x40],ECX
MOV EAX,dword ptr [RDI + -0x8]
TEST EAX,EAX
JNS 0x004ed2f8
MOV RCX,qword ptr [RSP + 0x10]
MOV RDX,qword ptr [RSP + 0x38]
LEA R9,[R13 + RBX*0x4]
MOV R8,R13
MOV ESI,dword ptr [RSP + 0x40]
CALL 0x004eca90
MOV RDI,qword ptr [RSP + 0x70]
MOV qword ptr [RSP + 0x10],RAX
MOV EAX,dword ptr [RDI + -0x8]
TEST EAX,EAX
JNS 0x004ed2e0
MOV RSI,qword ptr [RSP + 0x10]
MOV RCX,qword ptr [RDI + -0x18]
SUB RSI,RDI
MOV RDX,RCX
SAR RSI,0x2
SUB RDX,RSI
CMP RSI,RCX
JA 0x004ed31f
MOV RDI,qword ptr [RSP + 0x30]
XOR ECX,ECX
CALL 0x00519470
MOV EAX,dword ptr [RBP + 0x60]
TEST EAX,EAX
JG 0x004ed180
MOV RDX,qword ptr [RSP + 0x70]
MOV EAX,dword ptr [R15 + 0x18]
MOV RCX,qword ptr [RDX + -0x18]
MOV EDI,EAX
AND EDI,0xb0
ADD RCX,R14
MOV dword ptr [RSP + 0x48],EDI
MOV qword ptr [RSP + 0x40],RCX
TEST AH,0x2
JNZ 0x004ed148
LEA RAX,[0x68b600]
MOV RBX,qword ptr [RSP + 0x40]
ADD RAX,0x18
LEA RSI,[RBX + RBX*0x1]
MOV qword ptr [RSP + 0x78],RAX
LEA RAX,[RSP + 0x78]
MOV RDI,RAX
MOV qword ptr [RSP + 0x10],RAX
CALL 0x0051a0b0
MOV RAX,qword ptr [R15 + 0x10]
CMP dword ptr [RSP + 0x48],0x10
LEA R12,[0x58e28c]
SETZ DL
CMP RAX,RBX
MOV qword ptr [RSP + 0x38],RAX
LEA RBX,[RSP + 0x6c]
SETA AL
LEA R13,[RBX + 0x4]
AND EDX,EAX
MOV byte ptr [RSP + 0x4f],DL
CMP byte ptr [RBX],0x4
JA 0x004ed060
MOVZX EAX,byte ptr [RBX]
MOVSXD RAX,dword ptr [R12 + RAX*0x4]
ADD RAX,R12
JMP RAX
TEST R14,R14
JZ 0x004ed060
MOV RAX,qword ptr [RSP + 0x28]
MOV RDI,qword ptr [RSP + 0x10]
MOV ESI,dword ptr [RAX]
CALL 0x0051a5d0
JMP 0x004ed060
TEST byte ptr [R15 + 0x19],0x2
JZ 0x004ed060
MOV RDX,qword ptr [RBP + 0x38]
MOV RSI,qword ptr [RBP + 0x30]
MOV RDI,qword ptr [RSP + 0x10]
CALL 0x0051a320
JMP 0x004ed060
CMP byte ptr [RSP + 0x4f],0x0
JZ 0x004ed1b0
MOV EDX,dword ptr [RSP + 0x1c]
MOV RDI,qword ptr [RSP + 0x10]
MOV RSI,qword ptr [RSP + 0x38]
SUB RSI,qword ptr [RSP + 0x40]
CALL 0x0051a4b0
JMP 0x004ed060
CMP byte ptr [RSP + 0x4f],0x0
JZ 0x004ed060
JMP 0x004ed01b
MOV RSI,qword ptr [RSP + 0x30]
MOV RDI,qword ptr [RSP + 0x10]
CALL 0x0051a190
NOP word ptr [RAX + RAX*0x1]
ADD RBX,0x1
CMP RBX,R13
JNZ 0x004ecfba
CMP R14,0x1
JA 0x004ed160
MOV RSI,qword ptr [RSP + 0x78]
MOV RAX,qword ptr [RSP + 0x38]
MOV RBX,qword ptr [RSI + -0x18]
CMP RAX,RBX
JA 0x004ed110
CMP byte ptr [RSP + 0x1b],0x0
MOVSXD RBX,EBX
JNZ 0x004ed0b3
MOV RDI,qword ptr [RSP + 0x8]
MOV RDX,RBX
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x60]
CMP RBX,RAX
MOV RSI,qword ptr [RSP + 0x78]
SETNZ byte ptr [RSP + 0x1b]
XOR EBX,EBX
MOV RAX,qword ptr [RSP + 0x8]
MOV BL,byte ptr [RSP + 0x1b]
LEA RDI,[RSI + -0x18]
MOV qword ptr [RSP + 0x50],RAX
MOVZX EAX,BL
MOV qword ptr [RSP + 0x58],RBX
MOV RBX,qword ptr [RSP + 0x20]
XOR BL,BL
OR RBX,RAX
CMP RDI,qword ptr [0x0067bcd8]
MOV byte ptr [RSP + 0x1b],BL
JNZ 0x004ed310
MOV RAX,qword ptr [RSP + 0x70]
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x0067bcd8]
JZ 0x004ecded
LEA RSI,[RSP + 0x6b]
CALL 0x004e8ab0
JMP 0x004ecded
MOV RCX,RAX
SUB RCX,RBX
CMP dword ptr [RSP + 0x48],0x20
JZ 0x004ed2c0
MOV R8D,dword ptr [RSP + 0x1c]
MOV RDI,qword ptr [RSP + 0x10]
XOR EDX,EDX
XOR ESI,ESI
CALL 0x00519980
MOV RSI,qword ptr [RSP + 0x78]
MOV RBX,qword ptr [RSP + 0x38]
JMP 0x004ed08e
MOV RAX,qword ptr [RBP + 0x38]
ADD RCX,RAX
MOV qword ptr [RSP + 0x40],RCX
JMP 0x004ecf62
MOV RSI,qword ptr [RSP + 0x28]
MOV RDI,qword ptr [RSP + 0x10]
LEA RDX,[R14 + -0x1]
ADD RSI,0x4
CALL 0x0051a320
JMP 0x004ed077
MOV ESI,dword ptr [RBP + 0x24]
MOV RDI,qword ptr [RSP + 0x30]
CALL 0x0051a5d0
TEST RBX,RBX
JS 0x004ed290
MOVSXD RDX,dword ptr [RBP + 0x60]
MOV RDI,qword ptr [RSP + 0x30]
LEA RSI,[R13 + RBX*0x4]
CALL 0x0051a320
JMP 0x004ecf38
MOV ESI,dword ptr [RSP + 0x1c]
MOV RDI,qword ptr [RSP + 0x10]
CALL 0x0051a5d0
JMP 0x004ed060
MOV EDI,0xa0
CALL 0x0049cb60
MOV RBP,RAX
MOV dword ptr [RAX + 0x8],0x0
MOV RSI,qword ptr [RSP + 0x28]
LEA RAX,[0x679340]
MOV qword ptr [RBP + 0x10],0x0
MOV RDI,RBP
MOV qword ptr [RBP + 0x18],0x0
ADD RAX,0x10
MOV byte ptr [RBP + 0x20],0x0
MOV qword ptr [RBP],RAX
MOV qword ptr [RBP + 0x24],0x0
MOV qword ptr [RBP + 0x30],0x0
MOV qword ptr [RBP + 0x38],0x0
MOV qword ptr [RBP + 0x40],0x0
MOV qword ptr [RBP + 0x48],0x0
MOV qword ptr [RBP + 0x50],0x0
MOV qword ptr [RBP + 0x58],0x0
MOV qword ptr [RBP + 0x60],0x0
MOV dword ptr [RBP + 0x68],0x0
MOV byte ptr [RBP + 0x98],0x0
CALL 0x004eb7d0
MOV RDI,qword ptr [R15 + 0xd0]
MOV RSI,RBP
MOV RDX,R14
CALL 0x004a0ee0
MOV RBP,qword ptr [R13]
JMP 0x004ecda1
MOV RDI,qword ptr [RSP + 0x30]
MOV RDX,RBX
MOV RSI,R13
CALL 0x00519bc0
JMP 0x004ecf2d
MOV RSI,RBX
MOV RBX,qword ptr [RSP + 0x30]
MOV EDX,dword ptr [RBP + 0x70]
NEG RSI
MOV RDI,RBX
CALL 0x0051a4b0
MOV RDX,R12
MOV RSI,R13
MOV RDI,RBX
CALL 0x0051a320
JMP 0x004ecf38
MOV EDX,dword ptr [RSP + 0x1c]
MOV RDI,qword ptr [RSP + 0x10]
MOV RSI,RCX
CALL 0x0051a4b0
JMP 0x004ed134
MOV RDI,qword ptr [RSP + 0x30]
CALL 0x00519690
MOV RDI,qword ptr [RSP + 0x70]
JMP 0x004ecf02
MOV RDI,qword ptr [RSP + 0x30]
CALL 0x00519690
MOV RDI,qword ptr [RSP + 0x70]
JMP 0x004eced2
LEA RSI,[RSP + 0x6b]
CALL 0x004e8ab0
JMP 0x004ed0ea
MOV RDX,RSI
LEA RDI,[0x56ca88]
XOR EAX,EAX
LEA RSI,[0x582c64]
CALL 0x004dcce0
(translation_unit "undefined1  [16]\nFUN_004ecd30(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  bool bVar12;\n  long lVar13;\n  undefined **ppuVar14;\n  ulong uVar15;\n  ulong uVar16;\n  uint uVar17;\n  int *piVar18;\n  undefined1 auVar19 [16];\n  char local_9d;\n  undefined4 *local_90;\n  ulong local_78;\n  undefined1 local_4d;\n  undefined1 local_4c [4];\n  undefined *local_48;\n  undefined *local_40 [2];\n  \n  local_9d = (char)param_3;\n  plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);\n  lVar8 = FUN_004a0a70(&DAT_0068b4e8);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);\n  lVar10 = *plVar1;\n  if (lVar10 == 0) {\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }\n  piVar3 = (int *)*param_6;\n  piVar18 = piVar3;\n  if (*piVar3 == *(int *)(lVar10 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }\n  lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));\n  lVar8 = lVar8 - (long)piVar18 >> 2;\n  if (lVar8 != 0) {\n    local_48 = &DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }\n  auVar19._9_7_ = (int7)(param_3 >> 8);\n  auVar19[8] = local_9d;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar19._0_8_ = param_2;\n  return auVar19;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (declaration "FUN_004ecd30(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;" (macro_type_specifier "FUN_004ecd30(undefined8" identifier ( (type_descriptor "undefined8" type_identifier) )) identifier , (ERROR "long" identifier) (pointer_declarator "*param_2" * identifier) , (ERROR "ulong" identifier) identifier , (ERROR "long" identifier) identifier , identifier (ERROR "param_5" identifier) , (ERROR "undefined8 *param_6)\n\n{\n  long" identifier (pointer_declarator "*param_6" * identifier) ) { long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined **ppuVar14;" type_identifier (pointer_declarator "**ppuVar14" * (pointer_declarator "*ppuVar14" * identifier)) ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "ulong uVar16;" type_identifier identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int *piVar18;" primitive_type (pointer_declarator "*piVar18" * identifier) ;) (declaration "undefined1 auVar19 [16];" type_identifier (array_declarator "auVar19 [16]" identifier [ number_literal ]) ;) (declaration "char local_9d;" primitive_type identifier ;) (declaration "undefined4 *local_90;" type_identifier (pointer_declarator "*local_90" * identifier) ;) (declaration "ulong local_78;" type_identifier identifier ;) (declaration "undefined1 local_4d;" type_identifier identifier ;) (declaration "undefined1 local_4c [4];" type_identifier (array_declarator "local_4c [4]" identifier [ number_literal ]) ;) (declaration "undefined *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined *local_40 [2];" type_identifier (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (expression_statement "local_9d = (char)param_3;" (assignment_expression "local_9d = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);" (assignment_expression "plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0)" identifier = (cast_expression "(long *)FUN_004eacf0(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_004eacf0(param_4 + 0xd0)" identifier (argument_list "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) ))))) ;) (expression_statement "lVar8 = FUN_004a0a70(&DAT_0068b4e8);" (assignment_expression "lVar8 = FUN_004a0a70(&DAT_0068b4e8)" identifier = (call_expression "FUN_004a0a70(&DAT_0068b4e8)" identifier (argument_list "(&DAT_0068b4e8)" ( (pointer_expression "&DAT_0068b4e8" & identifier) )))) ;) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" identifier = (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" * (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" ( (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" * (cast_expression "(long *)(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "lVar8 * 8" identifier * number_literal)) )))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (if_statement "if (lVar10 == 0) {\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }" if (parenthesized_expression "(lVar10 == 0)" ( (binary_expression "lVar10 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }" { comment (expression_statement "puVar11 = (undefined8 *)FUN_0049cb60(0xa0);" (assignment_expression "puVar11 = (undefined8 *)FUN_0049cb60(0xa0)" identifier = (cast_expression "(undefined8 *)FUN_0049cb60(0xa0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049cb60(0xa0)" identifier (argument_list "(0xa0)" ( number_literal ))))) ;) (expression_statement "*(undefined4 *)(puVar11 + 1) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 1) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 1)" * (cast_expression "(undefined4 *)(puVar11 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 1)" ( (binary_expression "puVar11 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[2] = 0;" (assignment_expression "puVar11[2] = 0" (subscript_expression "puVar11[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[3] = 0;" (assignment_expression "puVar11[3] = 0" (subscript_expression "puVar11[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar11 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar11 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar11 + 4)" * (cast_expression "(undefined1 *)(puVar11 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 4)" ( (binary_expression "puVar11 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*puVar11 = &PTR_FUN_00679350;" (assignment_expression "*puVar11 = &PTR_FUN_00679350" (pointer_expression "*puVar11" * identifier) = (pointer_expression "&PTR_FUN_00679350" & identifier)) ;) (expression_statement "*(undefined8 *)((long)puVar11 + 0x24) = 0;" (assignment_expression "*(undefined8 *)((long)puVar11 + 0x24) = 0" (pointer_expression "*(undefined8 *)((long)puVar11 + 0x24)" * (cast_expression "(undefined8 *)((long)puVar11 + 0x24)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar11 + 0x24)" ( (binary_expression "(long)puVar11 + 0x24" (cast_expression "(long)puVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[6] = 0;" (assignment_expression "puVar11[6] = 0" (subscript_expression "puVar11[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[7] = 0;" (assignment_expression "puVar11[7] = 0" (subscript_expression "puVar11[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[8] = 0;" (assignment_expression "puVar11[8] = 0" (subscript_expression "puVar11[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[9] = 0;" (assignment_expression "puVar11[9] = 0" (subscript_expression "puVar11[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[10] = 0;" (assignment_expression "puVar11[10] = 0" (subscript_expression "puVar11[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[0xb] = 0;" (assignment_expression "puVar11[0xb] = 0" (subscript_expression "puVar11[0xb]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[0xc] = 0;" (assignment_expression "puVar11[0xc] = 0" (subscript_expression "puVar11[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)(puVar11 + 0xd) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 0xd) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 0xd)" * (cast_expression "(undefined4 *)(puVar11 + 0xd)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar11 + 0x13) = 0;" (assignment_expression "*(undefined1 *)(puVar11 + 0x13) = 0" (pointer_expression "*(undefined1 *)(puVar11 + 0x13)" * (cast_expression "(undefined1 *)(puVar11 + 0x13)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0x13)" ( (binary_expression "puVar11 + 0x13" identifier + number_literal) )))) = number_literal) ;) comment (expression_statement "FUN_004eb7d0(puVar11,param_4 + 0xd0);" (call_expression "FUN_004eb7d0(puVar11,param_4 + 0xd0)" identifier (argument_list "(puVar11,param_4 + 0xd0)" ( identifier , (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);" (call_expression "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8)" identifier (argument_list "(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8)" ( (pointer_expression "*(undefined8 *)(param_4 + 0xd0)" * (cast_expression "(undefined8 *)(param_4 + 0xd0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) , identifier , identifier ))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) })) (expression_statement "piVar3 = (int *)*param_6;" (assignment_expression "piVar3 = (int *)*param_6" identifier = (cast_expression "(int *)*param_6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_6" * identifier))) ;) (expression_statement "piVar18 = piVar3;" (assignment_expression "piVar18 = piVar3" identifier = identifier) ;) (if_statement "if (*piVar3 == *(int *)(lVar10 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" if (parenthesized_expression "(*piVar3 == *(int *)(lVar10 + 0x6c))" ( (binary_expression "*piVar3 == *(int *)(lVar10 + 0x6c)" (pointer_expression "*piVar3" * identifier) == (pointer_expression "*(int *)(lVar10 + 0x6c)" * (cast_expression "(int *)(lVar10 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x6c)" ( (binary_expression "lVar10 + 0x6c" identifier + number_literal) ))))) )) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x68)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x68)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 0x68)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 0x68)" ( (binary_expression "lVar10 + 0x68" identifier + number_literal) ))))) ;) (expression_statement "local_90 = *(undefined4 **)(lVar10 + 0x50);" (assignment_expression "local_90 = *(undefined4 **)(lVar10 + 0x50)" identifier = (pointer_expression "*(undefined4 **)(lVar10 + 0x50)" * (cast_expression "(undefined4 **)(lVar10 + 0x50)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x50)" ( (binary_expression "lVar10 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "uVar15 = *(ulong *)(lVar10 + 0x58);" (assignment_expression "uVar15 = *(ulong *)(lVar10 + 0x58)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x58)" * (cast_expression "(ulong *)(lVar10 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }" if (parenthesized_expression "(*(long *)(piVar3 + -6) != 0)" ( (binary_expression "*(long *)(piVar3 + -6) != 0" (pointer_expression "*(long *)(piVar3 + -6)" * (cast_expression "(long *)(piVar3 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + -6)" ( (binary_expression "piVar3 + -6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      piVar18 = piVar3 + 1;\n    }" { (expression_statement "piVar18 = piVar3 + 1;" (assignment_expression "piVar18 = piVar3 + 1" identifier = (binary_expression "piVar3 + 1" identifier + number_literal)) ;) })) }) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" else (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 100);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 100)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 100)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 100)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 100)" ( (binary_expression "lVar10 + 100" identifier + number_literal) ))))) ;) (expression_statement "local_90 = *(undefined4 **)(lVar10 + 0x40);" (assignment_expression "local_90 = *(undefined4 **)(lVar10 + 0x40)" identifier = (pointer_expression "*(undefined4 **)(lVar10 + 0x40)" * (cast_expression "(undefined4 **)(lVar10 + 0x40)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x40)" ( (binary_expression "lVar10 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar15 = *(ulong *)(lVar10 + 0x48);" (assignment_expression "uVar15 = *(ulong *)(lVar10 + 0x48)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x48)" * (cast_expression "(ulong *)(lVar10 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x48)" ( (binary_expression "lVar10 + 0x48" identifier + number_literal) ))))) ;) }))) (expression_statement "lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));" (assignment_expression "lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" identifier = (call_expression "(**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" (parenthesized_expression "(**(code **)(*plVar7 + 0x28))" ( (pointer_expression "**(code **)(*plVar7 + 0x28)" * (pointer_expression "*(code **)(*plVar7 + 0x28)" * (cast_expression "(code **)(*plVar7 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar7 + 0x28)" ( (binary_expression "*plVar7 + 0x28" (pointer_expression "*plVar7" * identifier) + number_literal) ))))) )) (argument_list "(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" ( identifier , number_literal , identifier , (binary_expression "piVar18 + *(long *)(piVar3 + -6)" identifier + (pointer_expression "*(long *)(piVar3 + -6)" * (cast_expression "(long *)(piVar3 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + -6)" ( (binary_expression "piVar3 + -6" identifier + number_literal) ))))) )))) ;) (expression_statement "lVar8 = lVar8 - (long)piVar18 >> 2;" (assignment_expression "lVar8 = lVar8 - (long)piVar18 >> 2" identifier = (binary_expression "lVar8 - (long)piVar18 >> 2" (binary_expression "lVar8 - (long)piVar18" identifier - (cast_expression "(long)piVar18" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (lVar8 != 0) {\n    local_48 = &DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }" if (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) (compound_statement "{\n    local_48 = &DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }" { (expression_statement "local_48 = &DAT_0068b618;" (assignment_expression "local_48 = &DAT_0068b618" identifier = (pointer_expression "&DAT_0068b618" & identifier)) ;) comment (expression_statement "FUN_0051a0b0(&local_48,lVar8 * 2);" (call_expression "FUN_0051a0b0(&local_48,lVar8 * 2)" identifier (argument_list "(&local_48,lVar8 * 2)" ( (pointer_expression "&local_48" & identifier) , (binary_expression "lVar8 * 2" identifier * number_literal) ))) ;) (expression_statement "iVar6 = *(int *)(lVar10 + 0x60);" (assignment_expression "iVar6 = *(int *)(lVar10 + 0x60)" identifier = (pointer_expression "*(int *)(lVar10 + 0x60)" * (cast_expression "(int *)(lVar10 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ;) (expression_statement "lVar13 = lVar8 - iVar6;" (assignment_expression "lVar13 = lVar8 - iVar6" identifier = (binary_expression "lVar8 - iVar6" identifier - identifier)) ;) (if_statement "if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }" if (parenthesized_expression "(0 < lVar13)" ( (binary_expression "0 < lVar13" number_literal < identifier) )) (compound_statement "{\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }" { (if_statement "if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (compound_statement "{\n        lVar13 = lVar8;\n      }" { (expression_statement "lVar13 = lVar8;" (assignment_expression "lVar13 = lVar8" identifier = identifier) ;) })) (if_statement "if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" if (parenthesized_expression "(*(long *)(lVar10 + 0x18) == 0)" ( (binary_expression "*(long *)(lVar10 + 0x18) == 0" (pointer_expression "*(long *)(lVar10 + 0x18)" * (cast_expression "(long *)(lVar10 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }" { comment (expression_statement "FUN_00519bc0(&local_48,piVar18,lVar13);" (call_expression "FUN_00519bc0(&local_48,piVar18,lVar13)" identifier (argument_list "(&local_48,piVar18,lVar13)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" else (compound_statement "{\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" { (expression_statement "FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);" (call_expression "FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0)" identifier (argument_list "(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0)" ( (pointer_expression "&local_48" & identifier) , number_literal , (pointer_expression "*(undefined8 *)(local_48 + -0x18)" * (cast_expression "(undefined8 *)(local_48 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) , (binary_expression "lVar13 * 2" identifier * number_literal) , number_literal ))) ;) (expression_statement "uVar4 = *(undefined8 *)(lVar10 + 0x18);" (assignment_expression "uVar4 = *(undefined8 *)(lVar10 + 0x18)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x18)" * (cast_expression "(undefined8 *)(lVar10 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(undefined8 *)(lVar10 + 0x10);" (assignment_expression "uVar5 = *(undefined8 *)(lVar10 + 0x10)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x10)" * (cast_expression "(undefined8 *)(lVar10 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x10)" ( (binary_expression "lVar10 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(undefined4 *)(lVar10 + 0x28);" (assignment_expression "uVar2 = *(undefined4 *)(lVar10 + 0x28)" identifier = (pointer_expression "*(undefined4 *)(lVar10 + 0x28)" * (cast_expression "(undefined4 *)(lVar10 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x28)" ( (binary_expression "lVar10 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }" if (parenthesized_expression "(-1 < *(int *)(local_48 + -8))" ( (binary_expression "-1 < *(int *)(local_48 + -8)" number_literal < (pointer_expression "*(int *)(local_48 + -8)" * (cast_expression "(int *)(local_48 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -8)" ( (binary_expression "local_48 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n          FUN_00519690(&local_48);\n        }" { (expression_statement "FUN_00519690(&local_48);" (call_expression "FUN_00519690(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) })) (expression_statement "lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);" (assignment_expression "lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" identifier = (call_expression "FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" identifier (argument_list "(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" ( identifier , identifier , identifier , identifier , identifier , (binary_expression "piVar18 + lVar13" identifier + identifier) )))) ;) (if_statement "if (-1 < *(int *)(local_48 + -8)) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }" if (parenthesized_expression "(-1 < *(int *)(local_48 + -8))" ( (binary_expression "-1 < *(int *)(local_48 + -8)" number_literal < (pointer_expression "*(int *)(local_48 + -8)" * (cast_expression "(int *)(local_48 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -8)" ( (binary_expression "local_48 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          FUN_00519690(&local_48);\n        }" { comment (expression_statement "FUN_00519690(&local_48);" (call_expression "FUN_00519690(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) })) (expression_statement "uVar16 = lVar9 - (long)local_48 >> 2;" (assignment_expression "uVar16 = lVar9 - (long)local_48 >> 2" identifier = (binary_expression "lVar9 - (long)local_48 >> 2" (binary_expression "lVar9 - (long)local_48" identifier - (cast_expression "(long)local_48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }" if (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar16)" ( (binary_expression "*(ulong *)(local_48 + -0x18) < uVar16" (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }" { comment (expression_statement "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);" (call_expression "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::erase"" " string_content ") , identifier ))) ;) })) (expression_statement "FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);" (call_expression "FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0)" identifier (argument_list "(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0)" ( (pointer_expression "&local_48" & identifier) , identifier , (binary_expression "*(ulong *)(local_48 + -0x18) - uVar16" (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) - identifier) , number_literal ))) ;) }))) (expression_statement "iVar6 = *(int *)(lVar10 + 0x60);" (assignment_expression "iVar6 = *(int *)(lVar10 + 0x60)" identifier = (pointer_expression "*(int *)(lVar10 + 0x60)" * (cast_expression "(int *)(lVar10 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar6) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }" { comment (expression_statement "FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));" (call_expression "FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24))" identifier (argument_list "(&local_48,*(undefined4 *)(lVar10 + 0x24))" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*(undefined4 *)(lVar10 + 0x24)" * (cast_expression "(undefined4 *)(lVar10 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x24)" ( (binary_expression "lVar10 + 0x24" identifier + number_literal) )))) ))) ;) (if_statement "if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" if (parenthesized_expression "(lVar13 < 0)" ( (binary_expression "lVar13 < 0" identifier < number_literal) )) (compound_statement "{\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }" { (expression_statement "FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));" (call_expression "FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70))" identifier (argument_list "(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70))" ( (pointer_expression "&local_48" & identifier) , (unary_expression "-lVar13" - identifier) , (pointer_expression "*(undefined4 *)(lVar10 + 0x70)" * (cast_expression "(undefined4 *)(lVar10 + 0x70)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x70)" ( (binary_expression "lVar10 + 0x70" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_0051a320(&local_48,piVar18,lVar8);" (call_expression "FUN_0051a320(&local_48,piVar18,lVar8)" identifier (argument_list "(&local_48,piVar18,lVar8)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" else (compound_statement "{\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" { (expression_statement "FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));" (call_expression "FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60))" identifier (argument_list "(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60))" ( (pointer_expression "&local_48" & identifier) , (binary_expression "piVar18 + lVar13" identifier + identifier) , (cast_expression "(long)*(int *)(lVar10 + 0x60)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(lVar10 + 0x60)" * (cast_expression "(int *)(lVar10 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ))) ;) }))) })) (expression_statement "uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar17 = *(uint *)(param_4 + 0x18) & 0xb0" identifier = (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_78 = *(long *)(local_48 + -0x18) + uVar15;" (assignment_expression "local_78 = *(long *)(local_48 + -0x18) + uVar15" identifier = (binary_expression "*(long *)(local_48 + -0x18) + uVar15" (pointer_expression "*(long *)(local_48 + -0x18)" * (cast_expression "(long *)(local_48 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }" if (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" ( (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" ( (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }" { (expression_statement "local_78 = local_78 + *(long *)(lVar10 + 0x38);" (assignment_expression "local_78 = local_78 + *(long *)(lVar10 + 0x38)" identifier = (binary_expression "local_78 + *(long *)(lVar10 + 0x38)" identifier + (pointer_expression "*(long *)(lVar10 + 0x38)" * (cast_expression "(long *)(lVar10 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x38)" ( (binary_expression "lVar10 + 0x38" identifier + number_literal) )))))) ;) })) (expression_statement "local_40[0] = &DAT_0068b618;" (assignment_expression "local_40[0] = &DAT_0068b618" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (pointer_expression "&DAT_0068b618" & identifier)) ;) comment (expression_statement "FUN_0051a0b0(local_40,local_78 * 2);" (call_expression "FUN_0051a0b0(local_40,local_78 * 2)" identifier (argument_list "(local_40,local_78 * 2)" ( identifier , (binary_expression "local_78 * 2" identifier * number_literal) ))) ;) (expression_statement "uVar16 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar16 = *(ulong *)(param_4 + 0x10)" identifier = (pointer_expression "*(ulong *)(param_4 + 0x10)" * (cast_expression "(ulong *)(param_4 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "ppuVar14 = (undefined **)local_4c;" (assignment_expression "ppuVar14 = (undefined **)local_4c" identifier = (cast_expression "(undefined **)local_4c" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "bVar12 = uVar17 == 0x10 && local_78 < uVar16;" (assignment_expression "bVar12 = uVar17 == 0x10 && local_78 < uVar16" identifier = (binary_expression "uVar17 == 0x10 && local_78 < uVar16" (binary_expression "uVar17 == 0x10" identifier == number_literal) && (binary_expression "local_78 < uVar16" identifier < identifier))) ;) (do_statement "do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);" do (compound_statement "{\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    }" { (switch_statement "switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }" switch (parenthesized_expression "(*(undefined1 *)ppuVar14)" ( (pointer_expression "*(undefined1 *)ppuVar14" * (cast_expression "(undefined1 *)ppuVar14" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }" { (case_statement "case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;" case number_literal : (if_statement "if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }" { (labeled_statement "LAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);" statement_identifier : (expression_statement "FUN_0051a4b0(local_40,uVar16 - local_78,param_5);" (call_expression "FUN_0051a4b0(local_40,uVar16 - local_78,param_5)" identifier (argument_list "(local_40,uVar16 - local_78,param_5)" ( identifier , (binary_expression "uVar16 - local_78" identifier - identifier) , identifier ))) ;)) })) (break_statement "break;" break ;)) (case_statement "case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        FUN_0051a5d0(local_40,param_5);\n        break;" case number_literal : (if_statement "if (bVar12) goto LAB_004ed01b;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_004ed01b;" goto statement_identifier ;)) comment (expression_statement "FUN_0051a5d0(local_40,param_5);" (call_expression "FUN_0051a5d0(local_40,param_5)" identifier (argument_list "(local_40,param_5)" ( identifier , identifier ))) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;" case number_literal : (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }" if (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" ( (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" ( (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" * (cast_expression "(byte *)(param_4 + 0x19)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }" { (expression_statement "FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));" (call_expression "FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38))" identifier (argument_list "(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38))" ( identifier , (pointer_expression "*(undefined8 *)(lVar10 + 0x30)" * (cast_expression "(undefined8 *)(lVar10 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x30)" ( (binary_expression "lVar10 + 0x30" identifier + number_literal) )))) , (pointer_expression "*(undefined8 *)(lVar10 + 0x38)" * (cast_expression "(undefined8 *)(lVar10 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x38)" ( (binary_expression "lVar10 + 0x38" identifier + number_literal) )))) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;" case number_literal : (if_statement "if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }" if (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_0051a5d0(local_40,*local_90);\n        }" { (expression_statement "FUN_0051a5d0(local_40,*local_90);" (call_expression "FUN_0051a5d0(local_40,*local_90)" identifier (argument_list "(local_40,*local_90)" ( identifier , (pointer_expression "*local_90" * identifier) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 4:\n        FUN_0051a190(local_40,&local_48);" case number_literal : (expression_statement "FUN_0051a190(local_40,&local_48);" (call_expression "FUN_0051a190(local_40,&local_48)" identifier (argument_list "(local_40,&local_48)" ( identifier , (pointer_expression "&local_48" & identifier) ))) ;)) })) (expression_statement "ppuVar14 = (undefined **)((long)ppuVar14 + 1);" (assignment_expression "ppuVar14 = (undefined **)((long)ppuVar14 + 1)" identifier = (cast_expression "(undefined **)((long)ppuVar14 + 1)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)ppuVar14 + 1)" ( (binary_expression "(long)ppuVar14 + 1" (cast_expression "(long)ppuVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(ppuVar14 != &local_48)" ( (binary_expression "ppuVar14 != &local_48" identifier != (pointer_expression "&local_48" & identifier)) )) ;) (if_statement "if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }" if (parenthesized_expression "(1 < uVar15)" ( (binary_expression "1 < uVar15" number_literal < identifier) )) (compound_statement "{\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }" { (expression_statement "FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);" (call_expression "FUN_0051a320(local_40,local_90 + 1,uVar15 - 1)" identifier (argument_list "(local_40,local_90 + 1,uVar15 - 1)" ( identifier , (binary_expression "local_90 + 1" identifier + number_literal) , (binary_expression "uVar15 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar15 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar15 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }" if (parenthesized_expression "(uVar15 < uVar16)" ( (binary_expression "uVar15 < uVar16" identifier < identifier) )) (compound_statement "{\n      if (uVar17 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }" { (if_statement "if (uVar17 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" if (parenthesized_expression "(uVar17 == 0x20)" ( (binary_expression "uVar17 == 0x20" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" { comment (expression_statement "FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);" (call_expression "FUN_0051a4b0(local_40,uVar16 - uVar15,param_5)" identifier (argument_list "(local_40,uVar16 - uVar15,param_5)" ( identifier , (binary_expression "uVar16 - uVar15" identifier - identifier) , identifier ))) ;) (expression_statement "uVar15 = uVar16;" (assignment_expression "uVar15 = uVar16" identifier = identifier) ;) }) (else_clause "else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" else (compound_statement "{\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" { (expression_statement "FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);" (call_expression "FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5)" identifier (argument_list "(local_40,0,0,uVar16 - uVar15,param_5)" ( identifier , number_literal , number_literal , (binary_expression "uVar16 - uVar15" identifier - identifier) , identifier ))) ;) (expression_statement "uVar15 = uVar16;" (assignment_expression "uVar15 = uVar16" identifier = identifier) ;) }))) })) (if_statement "if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }" if (parenthesized_expression "(local_9d == '\0')" ( (binary_expression "local_9d == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }" { (expression_statement "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);" (assignment_expression "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15)" identifier = (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" ( (pointer_expression "**(code **)(*param_2 + 0x60)" * (pointer_expression "*(code **)(*param_2 + 0x60)" * (cast_expression "(code **)(*param_2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x60)" ( (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,local_40[0],(long)(int)uVar15)" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , (cast_expression "(long)(int)uVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "local_9d = (int)uVar15 != lVar10;" (assignment_expression "local_9d = (int)uVar15 != lVar10" identifier = (binary_expression "(int)uVar15 != lVar10" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) != identifier)) ;) })) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" identifier = (binary_expression "param_3 & 0xffffffffffffff00" identifier & number_literal)) ;) (if_statement "if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }" if (parenthesized_expression "(local_40[0] + -0x18 != PTR_DAT_0067bcd8)" ( (binary_expression "local_40[0] + -0x18 != PTR_DAT_0067bcd8" (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }" { (expression_statement "FUN_004e8ab0(local_40[0] + -0x18,&local_4d);" (call_expression "FUN_004e8ab0(local_40[0] + -0x18,&local_4d)" identifier (argument_list "(local_40[0] + -0x18,&local_4d)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) (if_statement "if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }" if (parenthesized_expression "(local_48 + -0x18 != PTR_DAT_0067bcd8)" ( (binary_expression "local_48 + -0x18 != PTR_DAT_0067bcd8" (binary_expression "local_48 + -0x18" identifier + number_literal) != identifier) )) (compound_statement "{\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }" { (expression_statement "FUN_004e8ab0(local_48 + -0x18,&local_4d);" (call_expression "FUN_004e8ab0(local_48 + -0x18,&local_4d)" identifier (argument_list "(local_48 + -0x18,&local_4d)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) })) (expression_statement "auVar19._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar19._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar19._9_7_" identifier . field_identifier) = (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(param_3 >> 8)" ( (binary_expression "param_3 >> 8" identifier >> number_literal) )))) ;) (expression_statement "auVar19[8] = local_9d;" (assignment_expression "auVar19[8] = local_9d" (subscript_expression "auVar19[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" * (cast_expression "(undefined8 *)(param_4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar19._0_8_ = param_2;" (assignment_expression "auVar19._0_8_ = param_2" (field_expression "auVar19._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar19;" return identifier ;) (ERROR "}" }))
(translation_unit "/* std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > std::money_put<wchar_t,\n   std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >\n   >::_M_insert<true>(std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, std::ios_base&,\n   wchar_t, std::wstring const&) const */\n\nundefined1  [16]\nstd::money_put<wchar_t,std::ostreambuf_iterator<wchar_t,std::char_traits<wchar_t>>>::_M_insert<true>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6)\n\n{\n  long *plVar1;\n  wchar_t wVar2;\n  char *pcVar3;\n  int iVar4;\n  ctype *pcVar5;\n  ulong uVar6;\n  long lVar7;\n  wchar_t *pwVar8;\n  long lVar9;\n  __moneypunct_cache<wchar_t,true> *this;\n  bool bVar10;\n  ulong uVar11;\n  wchar_t **ppwVar12;\n  ulong uVar13;\n  uint uVar14;\n  ulong uVar15;\n  wchar_t *pwVar16;\n  undefined1 auVar17 [16];\n  char local_9d;\n  wchar_t *local_90;\n  ulong local_78;\n  undefined1 local_4c [4];\n  wchar_t *local_48;\n  undefined *local_40 [2];\n  \n  local_9d = (char)param_3;\n  pcVar5 = use_facet<std::ctype<wchar_t>>((locale *)(param_4 + 0xd0));\n  uVar6 = locale::id::_M_id((id *)&moneypunct<wchar_t,true>::id);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8);\n  lVar9 = *plVar1;\n  if (lVar9 == 0) {\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00679350;\n    *(undefined8 *)(this + 0x24) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined8 *)(this + 0x60) = 0;\n    *(undefined4 *)(this + 0x68) = 0;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    __moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);\n    lVar9 = *plVar1;\n  }\n  pwVar8 = (wchar_t *)*param_6;\n  pwVar16 = pwVar8;\n  if (*pwVar8 == *(wchar_t *)(lVar9 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 0x68);\n    local_90 = *(wchar_t **)(lVar9 + 0x50);\n    uVar6 = *(ulong *)(lVar9 + 0x58);\n    if (*(long *)(pwVar8 + -6) != 0) {\n      pwVar16 = pwVar8 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 100);\n    local_90 = *(wchar_t **)(lVar9 + 0x40);\n    uVar6 = *(ulong *)(lVar9 + 0x48);\n  }\n  lVar7 = (**(code **)(*(long *)pcVar5 + 0x28))\n                    (pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6));\n  uVar15 = lVar7 - (long)pwVar16 >> 2;\n  if (uVar15 != 0) {\n    local_48 = (wchar_t *)&DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    std::wstring::reserve((wstring *)&local_48,uVar15 * 2);\n    iVar4 = *(int *)(lVar9 + 0x60);\n    uVar11 = uVar15 - (long)iVar4;\n    if (0 < (long)uVar11) {\n      if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }\n      if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }\n      iVar4 = *(int *)(lVar9 + 0x60);\n    }\n    if (0 < iVar4) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));\n      if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }\n    }\n    uVar14 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -6) + uVar6;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar9 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    std::wstring::reserve((wstring *)local_40,local_78 * 2);\n    uVar15 = *(ulong *)(param_4 + 0x10);\n    ppwVar12 = (wchar_t **)local_4c;\n    bVar10 = uVar14 == 0x10 && local_78 < uVar15;\n    do {\n      switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }\n      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);\n    } while (ppwVar12 != &local_48);\n    if (1 < uVar6) {\n      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);\n    }\n    uVar6 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar6 < uVar15) {\n      if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);\n      local_9d = (int)uVar6 != lVar9;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));\n    }\n  }\n  auVar17._9_7_ = (int7)(param_3 >> 8);\n  auVar17[8] = local_9d;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar17._0_8_ = param_2;\n  return auVar17;\n}\n\n" comment (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (labeled_statement "std::money_put<wchar_t,std::ostreambuf_iterator<wchar_t,std::char_traits<wchar_t>>>::_M_insert<true>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6)" statement_identifier (ERROR "::money_put<wchar_t,std::ostreambuf_iterator<wchar_t,std:" : : (comma_expression "money_put<wchar_t,std" (binary_expression "money_put<wchar_t" identifier < identifier) , identifier) : : (comma_expression "ostreambuf_iterator<wchar_t,std" (binary_expression "ostreambuf_iterator<wchar_t" identifier < identifier) , identifier) :) : (expression_statement "char_traits<wchar_t>>>::_M_insert<true>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6)" (binary_expression "char_traits<wchar_t>>>::_M_insert<true>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6)" (binary_expression "char_traits<wchar_t>>>::_M_insert<true" (binary_expression "char_traits<wchar_t>>>::_M_insert" identifier < (binary_expression "wchar_t>>>::_M_insert" identifier >> (ERROR ">::" > : :) identifier)) < true) > (parenthesized_expression "(undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6)" ( (comma_expression "undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6" identifier (ERROR "param_1" identifier) , (comma_expression "long *param_2,ulong param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6" (binary_expression "long *param_2" identifier * identifier) , (ERROR "ulong" identifier) (comma_expression "param_3,long param_4,wchar_t param_5,\n          undefined8 *param_6" identifier , (ERROR "long" identifier) (comma_expression "param_4,wchar_t param_5,\n          undefined8 *param_6" identifier , (ERROR "wchar_t" identifier) (comma_expression "param_5,\n          undefined8 *param_6" identifier , (binary_expression "undefined8 *param_6" identifier * identifier)))))) ))) ;)) (compound_statement "{\n  long *plVar1;\n  wchar_t wVar2;\n  char *pcVar3;\n  int iVar4;\n  ctype *pcVar5;\n  ulong uVar6;\n  long lVar7;\n  wchar_t *pwVar8;\n  long lVar9;\n  __moneypunct_cache<wchar_t,true> *this;\n  bool bVar10;\n  ulong uVar11;\n  wchar_t **ppwVar12;\n  ulong uVar13;\n  uint uVar14;\n  ulong uVar15;\n  wchar_t *pwVar16;\n  undefined1 auVar17 [16];\n  char local_9d;\n  wchar_t *local_90;\n  ulong local_78;\n  undefined1 local_4c [4];\n  wchar_t *local_48;\n  undefined *local_40 [2];\n  \n  local_9d = (char)param_3;\n  pcVar5 = use_facet<std::ctype<wchar_t>>((locale *)(param_4 + 0xd0));\n  uVar6 = locale::id::_M_id((id *)&moneypunct<wchar_t,true>::id);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8);\n  lVar9 = *plVar1;\n  if (lVar9 == 0) {\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00679350;\n    *(undefined8 *)(this + 0x24) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined8 *)(this + 0x60) = 0;\n    *(undefined4 *)(this + 0x68) = 0;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    __moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);\n    lVar9 = *plVar1;\n  }\n  pwVar8 = (wchar_t *)*param_6;\n  pwVar16 = pwVar8;\n  if (*pwVar8 == *(wchar_t *)(lVar9 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 0x68);\n    local_90 = *(wchar_t **)(lVar9 + 0x50);\n    uVar6 = *(ulong *)(lVar9 + 0x58);\n    if (*(long *)(pwVar8 + -6) != 0) {\n      pwVar16 = pwVar8 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 100);\n    local_90 = *(wchar_t **)(lVar9 + 0x40);\n    uVar6 = *(ulong *)(lVar9 + 0x48);\n  }\n  lVar7 = (**(code **)(*(long *)pcVar5 + 0x28))\n                    (pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6));\n  uVar15 = lVar7 - (long)pwVar16 >> 2;\n  if (uVar15 != 0) {\n    local_48 = (wchar_t *)&DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    std::wstring::reserve((wstring *)&local_48,uVar15 * 2);\n    iVar4 = *(int *)(lVar9 + 0x60);\n    uVar11 = uVar15 - (long)iVar4;\n    if (0 < (long)uVar11) {\n      if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }\n      if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }\n      iVar4 = *(int *)(lVar9 + 0x60);\n    }\n    if (0 < iVar4) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));\n      if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }\n    }\n    uVar14 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -6) + uVar6;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar9 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    std::wstring::reserve((wstring *)local_40,local_78 * 2);\n    uVar15 = *(ulong *)(param_4 + 0x10);\n    ppwVar12 = (wchar_t **)local_4c;\n    bVar10 = uVar14 == 0x10 && local_78 < uVar15;\n    do {\n      switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }\n      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);\n    } while (ppwVar12 != &local_48);\n    if (1 < uVar6) {\n      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);\n    }\n    uVar6 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar6 < uVar15) {\n      if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);\n      local_9d = (int)uVar6 != lVar9;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));\n    }\n  }\n  auVar17._9_7_ = (int7)(param_3 >> 8);\n  auVar17[8] = local_9d;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar17._0_8_ = param_2;\n  return auVar17;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "wchar_t wVar2;" type_identifier identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ctype *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (expression_statement "__moneypunct_cache<wchar_t,true> *this;" (comma_expression "__moneypunct_cache<wchar_t,true> *this" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true> *this" true > (pointer_expression "*this" * identifier))) ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "wchar_t **ppwVar12;" type_identifier (pointer_declarator "**ppwVar12" * (pointer_declarator "*ppwVar12" * identifier)) ;) (declaration "ulong uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "wchar_t *pwVar16;" type_identifier (pointer_declarator "*pwVar16" * identifier) ;) (declaration "undefined1 auVar17 [16];" type_identifier (array_declarator "auVar17 [16]" identifier [ number_literal ]) ;) (declaration "char local_9d;" primitive_type identifier ;) (declaration "wchar_t *local_90;" type_identifier (pointer_declarator "*local_90" * identifier) ;) (declaration "ulong local_78;" type_identifier identifier ;) (declaration "undefined1 local_4c [4];" type_identifier (array_declarator "local_4c [4]" identifier [ number_literal ]) ;) (declaration "wchar_t *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined *local_40 [2];" type_identifier (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (expression_statement "local_9d = (char)param_3;" (assignment_expression "local_9d = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "pcVar5 = use_facet<std::ctype<wchar_t>>((locale *)(param_4 + 0xd0));" (binary_expression "pcVar5 = use_facet<std::ctype<wchar_t>>((locale *)(param_4 + 0xd0))" (assignment_expression "pcVar5 = use_facet<std" identifier = (binary_expression "use_facet<std" identifier < identifier)) (ERROR "::ctype" : : identifier) < (binary_expression "wchar_t>>((locale *)(param_4 + 0xd0))" identifier >> (parenthesized_expression "((locale *)(param_4 + 0xd0))" ( (cast_expression "(locale *)(param_4 + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) )))) ;) (ERROR "uVar6 = locale::" (assignment_expression "uVar6 = locale" identifier = identifier) : :) (labeled_statement "id::_M_id((id *)&moneypunct<wchar_t,true>::id);" statement_identifier : (ERROR ":" :) (expression_statement "_M_id((id *)&moneypunct<wchar_t,true>::id);" (call_expression "_M_id((id *)&moneypunct<wchar_t,true>::id)" identifier (argument_list "((id *)&moneypunct<wchar_t,true>::id)" ( (binary_expression "(id *)&moneypunct<wchar_t" (cast_expression "(id *)&moneypunct" ( (type_descriptor "id *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&moneypunct" & identifier)) < identifier) , (binary_expression "true>::id" true > (ERROR "::" : :) identifier) ))) ;)) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8)" identifier = (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar6 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" * (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" ( (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" * (cast_expression "(long *)(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "uVar6 * 8" identifier * number_literal)) )))) ;) (expression_statement "lVar9 = *plVar1;" (assignment_expression "lVar9 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (if_statement "if (lVar9 == 0) {\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00679350;\n    *(undefined8 *)(this + 0x24) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined8 *)(this + 0x60) = 0;\n    *(undefined4 *)(this + 0x68) = 0;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    __moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);\n    lVar9 = *plVar1;\n  }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */\n    this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00679350;\n    *(undefined8 *)(this + 0x24) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined8 *)(this + 0x60) = 0;\n    *(undefined4 *)(this + 0x68) = 0;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0;\n                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */\n    __moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);\n    lVar9 = *plVar1;\n  }" { comment (expression_statement "this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0);" (assignment_expression "this = (__moneypunct_cache<wchar_t,true> *)operator_new(0xa0)" identifier = (parenthesized_expression "(__moneypunct_cache<wchar_t,true> *)operator_new(0xa0)" ( (comma_expression "__moneypunct_cache<wchar_t,true> *)operator_new(0xa0)" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true> *)operator_new(0xa0)" true > (pointer_expression "*)operator_new(0xa0)" * (ERROR ")" )) (call_expression "operator_new(0xa0)" identifier (argument_list "(0xa0)" ( number_literal )))))) ))) ;) (expression_statement "*(undefined4 *)(this + 8) = 0;" (assignment_expression "*(undefined4 *)(this + 8) = 0" (pointer_expression "*(undefined4 *)(this + 8)" * (cast_expression "(undefined4 *)(this + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x10) = 0;" (assignment_expression "*(undefined8 *)(this + 0x10) = 0" (pointer_expression "*(undefined8 *)(this + 0x10)" * (cast_expression "(undefined8 *)(this + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x18) = 0;" (assignment_expression "*(undefined8 *)(this + 0x18) = 0" (pointer_expression "*(undefined8 *)(this + 0x18)" * (cast_expression "(undefined8 *)(this + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = number_literal) ;) (expression_statement "this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0;" (assignment_expression "this[0x20] = (__moneypunct_cache<wchar_t,true>)0x0" (subscript_expression "this[0x20]" identifier [ number_literal ]) = (parenthesized_expression "(__moneypunct_cache<wchar_t,true>)0x0" ( (comma_expression "__moneypunct_cache<wchar_t,true>)0x0" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true>)0x0" true > (ERROR ")" )) number_literal)) ))) ;) (expression_statement "*(undefined ***)this = &PTR____moneypunct_cache_00679350;" (assignment_expression "*(undefined ***)this = &PTR____moneypunct_cache_00679350" (pointer_expression "*(undefined ***)this" * (cast_expression "(undefined ***)this" ( (type_descriptor "undefined ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) identifier)) = (pointer_expression "&PTR____moneypunct_cache_00679350" & identifier)) ;) (expression_statement "*(undefined8 *)(this + 0x24) = 0;" (assignment_expression "*(undefined8 *)(this + 0x24) = 0" (pointer_expression "*(undefined8 *)(this + 0x24)" * (cast_expression "(undefined8 *)(this + 0x24)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x24)" ( (binary_expression "this + 0x24" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x30) = 0;" (assignment_expression "*(undefined8 *)(this + 0x30) = 0" (pointer_expression "*(undefined8 *)(this + 0x30)" * (cast_expression "(undefined8 *)(this + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x30)" ( (binary_expression "this + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x38) = 0;" (assignment_expression "*(undefined8 *)(this + 0x38) = 0" (pointer_expression "*(undefined8 *)(this + 0x38)" * (cast_expression "(undefined8 *)(this + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x38)" ( (binary_expression "this + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x40) = 0;" (assignment_expression "*(undefined8 *)(this + 0x40) = 0" (pointer_expression "*(undefined8 *)(this + 0x40)" * (cast_expression "(undefined8 *)(this + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x40)" ( (binary_expression "this + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x48) = 0;" (assignment_expression "*(undefined8 *)(this + 0x48) = 0" (pointer_expression "*(undefined8 *)(this + 0x48)" * (cast_expression "(undefined8 *)(this + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x48)" ( (binary_expression "this + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x50) = 0;" (assignment_expression "*(undefined8 *)(this + 0x50) = 0" (pointer_expression "*(undefined8 *)(this + 0x50)" * (cast_expression "(undefined8 *)(this + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x50)" ( (binary_expression "this + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x58) = 0;" (assignment_expression "*(undefined8 *)(this + 0x58) = 0" (pointer_expression "*(undefined8 *)(this + 0x58)" * (cast_expression "(undefined8 *)(this + 0x58)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x58)" ( (binary_expression "this + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x60) = 0;" (assignment_expression "*(undefined8 *)(this + 0x60) = 0" (pointer_expression "*(undefined8 *)(this + 0x60)" * (cast_expression "(undefined8 *)(this + 0x60)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x60)" ( (binary_expression "this + 0x60" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(this + 0x68) = 0;" (assignment_expression "*(undefined4 *)(this + 0x68) = 0" (pointer_expression "*(undefined4 *)(this + 0x68)" * (cast_expression "(undefined4 *)(this + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x68)" ( (binary_expression "this + 0x68" identifier + number_literal) )))) = number_literal) ;) (expression_statement "this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0;" (assignment_expression "this[0x98] = (__moneypunct_cache<wchar_t,true>)0x0" (subscript_expression "this[0x98]" identifier [ number_literal ]) = (parenthesized_expression "(__moneypunct_cache<wchar_t,true>)0x0" ( (comma_expression "__moneypunct_cache<wchar_t,true>)0x0" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true>)0x0" true > (ERROR ")" )) number_literal)) ))) ;) comment (expression_statement "__moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0));" (comma_expression "__moneypunct_cache<wchar_t,true>::_M_cache(this,(locale *)(param_4 + 0xd0))" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true>::_M_cache(this,(locale *)(param_4 + 0xd0))" true > (ERROR "::" : :) (call_expression "_M_cache(this,(locale *)(param_4 + 0xd0))" identifier (argument_list "(this,(locale *)(param_4 + 0xd0))" ( identifier , (cast_expression "(locale *)(param_4 + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) ))))) ;) (labeled_statement "locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);" statement_identifier : (ERROR ":" :) (labeled_statement "_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);" statement_identifier : (ERROR ":" :) (expression_statement "_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6);" (call_expression "_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6)" identifier (argument_list "(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar6)" ( (pointer_expression "*(_Impl **)(param_4 + 0xd0)" * (cast_expression "(_Impl **)(param_4 + 0xd0)" ( (type_descriptor "_Impl **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) , (cast_expression "(facet *)this" ( (type_descriptor "facet *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;))) (expression_statement "lVar9 = *plVar1;" (assignment_expression "lVar9 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) })) (expression_statement "pwVar8 = (wchar_t *)*param_6;" (assignment_expression "pwVar8 = (wchar_t *)*param_6" identifier = (cast_expression "(wchar_t *)*param_6" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_6" * identifier))) ;) (expression_statement "pwVar16 = pwVar8;" (assignment_expression "pwVar16 = pwVar8" identifier = identifier) ;) (if_statement "if (*pwVar8 == *(wchar_t *)(lVar9 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 0x68);\n    local_90 = *(wchar_t **)(lVar9 + 0x50);\n    uVar6 = *(ulong *)(lVar9 + 0x58);\n    if (*(long *)(pwVar8 + -6) != 0) {\n      pwVar16 = pwVar8 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 100);\n    local_90 = *(wchar_t **)(lVar9 + 0x40);\n    uVar6 = *(ulong *)(lVar9 + 0x48);\n  }" if (parenthesized_expression "(*pwVar8 == *(wchar_t *)(lVar9 + 0x6c))" ( (binary_expression "*pwVar8 == *(wchar_t *)(lVar9 + 0x6c)" (pointer_expression "*pwVar8" * identifier) == (pointer_expression "*(wchar_t *)(lVar9 + 0x6c)" * (cast_expression "(wchar_t *)(lVar9 + 0x6c)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x6c)" ( (binary_expression "lVar9 + 0x6c" identifier + number_literal) ))))) )) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar9 + 0x68);\n    local_90 = *(wchar_t **)(lVar9 + 0x50);\n    uVar6 = *(ulong *)(lVar9 + 0x58);\n    if (*(long *)(pwVar8 + -6) != 0) {\n      pwVar16 = pwVar8 + 1;\n    }\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar9 + 0x68);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar9 + 0x68)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar9 + 0x68)" * (cast_expression "(undefined1 (*) [4])(lVar9 + 0x68)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar9 + 0x68)" ( (binary_expression "lVar9 + 0x68" identifier + number_literal) ))))) ;) (expression_statement "local_90 = *(wchar_t **)(lVar9 + 0x50);" (assignment_expression "local_90 = *(wchar_t **)(lVar9 + 0x50)" identifier = (pointer_expression "*(wchar_t **)(lVar9 + 0x50)" * (cast_expression "(wchar_t **)(lVar9 + 0x50)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar9 + 0x50)" ( (binary_expression "lVar9 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(ulong *)(lVar9 + 0x58);" (assignment_expression "uVar6 = *(ulong *)(lVar9 + 0x58)" identifier = (pointer_expression "*(ulong *)(lVar9 + 0x58)" * (cast_expression "(ulong *)(lVar9 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x58)" ( (binary_expression "lVar9 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (*(long *)(pwVar8 + -6) != 0) {\n      pwVar16 = pwVar8 + 1;\n    }" if (parenthesized_expression "(*(long *)(pwVar8 + -6) != 0)" ( (binary_expression "*(long *)(pwVar8 + -6) != 0" (pointer_expression "*(long *)(pwVar8 + -6)" * (cast_expression "(long *)(pwVar8 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar8 + -6)" ( (binary_expression "pwVar8 + -6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      pwVar16 = pwVar8 + 1;\n    }" { (expression_statement "pwVar16 = pwVar8 + 1;" (assignment_expression "pwVar16 = pwVar8 + 1" identifier = (binary_expression "pwVar8 + 1" identifier + number_literal)) ;) })) }) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar9 + 100);\n    local_90 = *(wchar_t **)(lVar9 + 0x40);\n    uVar6 = *(ulong *)(lVar9 + 0x48);\n  }" else (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar9 + 100);\n    local_90 = *(wchar_t **)(lVar9 + 0x40);\n    uVar6 = *(ulong *)(lVar9 + 0x48);\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar9 + 100);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar9 + 100)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar9 + 100)" * (cast_expression "(undefined1 (*) [4])(lVar9 + 100)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar9 + 100)" ( (binary_expression "lVar9 + 100" identifier + number_literal) ))))) ;) (expression_statement "local_90 = *(wchar_t **)(lVar9 + 0x40);" (assignment_expression "local_90 = *(wchar_t **)(lVar9 + 0x40)" identifier = (pointer_expression "*(wchar_t **)(lVar9 + 0x40)" * (cast_expression "(wchar_t **)(lVar9 + 0x40)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar9 + 0x40)" ( (binary_expression "lVar9 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(ulong *)(lVar9 + 0x48);" (assignment_expression "uVar6 = *(ulong *)(lVar9 + 0x48)" identifier = (pointer_expression "*(ulong *)(lVar9 + 0x48)" * (cast_expression "(ulong *)(lVar9 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x48)" ( (binary_expression "lVar9 + 0x48" identifier + number_literal) ))))) ;) }))) (expression_statement "lVar7 = (**(code **)(*(long *)pcVar5 + 0x28))\n                    (pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6));" (assignment_expression "lVar7 = (**(code **)(*(long *)pcVar5 + 0x28))\n                    (pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6))" identifier = (call_expression "(**(code **)(*(long *)pcVar5 + 0x28))\n                    (pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6))" (parenthesized_expression "(**(code **)(*(long *)pcVar5 + 0x28))" ( (pointer_expression "**(code **)(*(long *)pcVar5 + 0x28)" * (pointer_expression "*(code **)(*(long *)pcVar5 + 0x28)" * (cast_expression "(code **)(*(long *)pcVar5 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar5 + 0x28)" ( (binary_expression "*(long *)pcVar5 + 0x28" (pointer_expression "*(long *)pcVar5" * (cast_expression "(long *)pcVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pcVar5,0x800,pwVar16,pwVar16 + *(long *)(pwVar8 + -6))" ( identifier , number_literal , identifier , (binary_expression "pwVar16 + *(long *)(pwVar8 + -6)" identifier + (pointer_expression "*(long *)(pwVar8 + -6)" * (cast_expression "(long *)(pwVar8 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar8 + -6)" ( (binary_expression "pwVar8 + -6" identifier + number_literal) ))))) )))) ;) (expression_statement "uVar15 = lVar7 - (long)pwVar16 >> 2;" (assignment_expression "uVar15 = lVar7 - (long)pwVar16 >> 2" identifier = (binary_expression "lVar7 - (long)pwVar16 >> 2" (binary_expression "lVar7 - (long)pwVar16" identifier - (cast_expression "(long)pwVar16" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (uVar15 != 0) {\n    local_48 = (wchar_t *)&DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    std::wstring::reserve((wstring *)&local_48,uVar15 * 2);\n    iVar4 = *(int *)(lVar9 + 0x60);\n    uVar11 = uVar15 - (long)iVar4;\n    if (0 < (long)uVar11) {\n      if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }\n      if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }\n      iVar4 = *(int *)(lVar9 + 0x60);\n    }\n    if (0 < iVar4) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));\n      if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }\n    }\n    uVar14 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -6) + uVar6;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar9 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    std::wstring::reserve((wstring *)local_40,local_78 * 2);\n    uVar15 = *(ulong *)(param_4 + 0x10);\n    ppwVar12 = (wchar_t **)local_4c;\n    bVar10 = uVar14 == 0x10 && local_78 < uVar15;\n    do {\n      switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }\n      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);\n    } while (ppwVar12 != &local_48);\n    if (1 < uVar6) {\n      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);\n    }\n    uVar6 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar6 < uVar15) {\n      if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);\n      local_9d = (int)uVar6 != lVar9;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));\n    }\n  }" if (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) (compound_statement "{\n    local_48 = (wchar_t *)&DAT_0068b618;\n                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */\n    std::wstring::reserve((wstring *)&local_48,uVar15 * 2);\n    iVar4 = *(int *)(lVar9 + 0x60);\n    uVar11 = uVar15 - (long)iVar4;\n    if (0 < (long)uVar11) {\n      if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }\n      if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }\n      iVar4 = *(int *)(lVar9 + 0x60);\n    }\n    if (0 < iVar4) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));\n      if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }\n    }\n    uVar14 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -6) + uVar6;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar9 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */\n    std::wstring::reserve((wstring *)local_40,local_78 * 2);\n    uVar15 = *(ulong *)(param_4 + 0x10);\n    ppwVar12 = (wchar_t **)local_4c;\n    bVar10 = uVar14 == 0x10 && local_78 < uVar15;\n    do {\n      switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }\n      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);\n    } while (ppwVar12 != &local_48);\n    if (1 < uVar6) {\n      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);\n    }\n    uVar6 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar6 < uVar15) {\n      if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);\n      local_9d = (int)uVar6 != lVar9;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));\n    }\n  }" { (expression_statement "local_48 = (wchar_t *)&DAT_0068b618;" (assignment_expression "local_48 = (wchar_t *)&DAT_0068b618" identifier = (cast_expression "(wchar_t *)&DAT_0068b618" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0068b618" & identifier))) ;) comment (labeled_statement "std::wstring::reserve((wstring *)&local_48,uVar15 * 2);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::reserve((wstring *)&local_48,uVar15 * 2);" statement_identifier : (ERROR ":" :) (expression_statement "reserve((wstring *)&local_48,uVar15 * 2);" (call_expression "reserve((wstring *)&local_48,uVar15 * 2)" identifier (argument_list "((wstring *)&local_48,uVar15 * 2)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (binary_expression "uVar15 * 2" identifier * number_literal) ))) ;))) (expression_statement "iVar4 = *(int *)(lVar9 + 0x60);" (assignment_expression "iVar4 = *(int *)(lVar9 + 0x60)" identifier = (pointer_expression "*(int *)(lVar9 + 0x60)" * (cast_expression "(int *)(lVar9 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x60)" ( (binary_expression "lVar9 + 0x60" identifier + number_literal) ))))) ;) (expression_statement "uVar11 = uVar15 - (long)iVar4;" (assignment_expression "uVar11 = uVar15 - (long)iVar4" identifier = (binary_expression "uVar15 - (long)iVar4" identifier - (cast_expression "(long)iVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (0 < (long)uVar11) {\n      if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }\n      if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }\n      iVar4 = *(int *)(lVar9 + 0x60);\n    }" if (parenthesized_expression "(0 < (long)uVar11)" ( (binary_expression "0 < (long)uVar11" number_literal < (cast_expression "(long)uVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n      if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }\n      if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }\n      iVar4 = *(int *)(lVar9 + 0x60);\n    }" { (if_statement "if (iVar4 < 0) {\n        uVar11 = uVar15;\n      }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n        uVar11 = uVar15;\n      }" { (expression_statement "uVar11 = uVar15;" (assignment_expression "uVar11 = uVar15" identifier = identifier) ;) })) (if_statement "if (*(long *)(lVar9 + 0x18) == 0) {\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }\n      else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }" if (parenthesized_expression "(*(long *)(lVar9 + 0x18) == 0)" ( (binary_expression "*(long *)(lVar9 + 0x18) == 0" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */\n        std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);\n      }" { comment (labeled_statement "std::wstring::assign((wstring *)&local_48,pwVar16,uVar11);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::assign((wstring *)&local_48,pwVar16,uVar11);" statement_identifier : (ERROR ":" :) (expression_statement "assign((wstring *)&local_48,pwVar16,uVar11);" (call_expression "assign((wstring *)&local_48,pwVar16,uVar11)" identifier (argument_list "((wstring *)&local_48,pwVar16,uVar11)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , identifier , identifier ))) ;))) }) (else_clause "else {\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }" else (compound_statement "{\n        std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');\n        uVar13 = *(ulong *)(lVar9 + 0x18);\n        pcVar3 = *(char **)(lVar9 + 0x10);\n        wVar2 = *(wchar_t *)(lVar9 + 0x28);\n        if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);\n        if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }\n        uVar13 = (long)pwVar8 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }\n        std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);\n      }" { (labeled_statement "std::wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');" statement_identifier : (ERROR ":" :) (expression_statement "_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0');" (call_expression "_M_replace_aux\n                  ((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0')" identifier (argument_list "((wstring *)&local_48,0,*(ulong *)(local_48 + -6),uVar11 * 2,L'\0')" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , number_literal , (pointer_expression "*(ulong *)(local_48 + -6)" * (cast_expression "(ulong *)(local_48 + -6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -6)" ( (binary_expression "local_48 + -6" identifier + number_literal) )))) , (binary_expression "uVar11 * 2" identifier * number_literal) , (char_literal "L'\0'" L' escape_sequence ') ))) ;))) (expression_statement "uVar13 = *(ulong *)(lVar9 + 0x18);" (assignment_expression "uVar13 = *(ulong *)(lVar9 + 0x18)" identifier = (pointer_expression "*(ulong *)(lVar9 + 0x18)" * (cast_expression "(ulong *)(lVar9 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "pcVar3 = *(char **)(lVar9 + 0x10);" (assignment_expression "pcVar3 = *(char **)(lVar9 + 0x10)" identifier = (pointer_expression "*(char **)(lVar9 + 0x10)" * (cast_expression "(char **)(lVar9 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "wVar2 = *(wchar_t *)(lVar9 + 0x28);" (assignment_expression "wVar2 = *(wchar_t *)(lVar9 + 0x28)" identifier = (pointer_expression "*(wchar_t *)(lVar9 + 0x28)" * (cast_expression "(wchar_t *)(lVar9 + 0x28)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x28)" ( (binary_expression "lVar9 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (L'\xffffffff' < local_48[-2]) {\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }" if (parenthesized_expression "(L'\xffffffff' < local_48[-2])" ( (binary_expression "L'\xffffffff' < local_48[-2]" (char_literal "L'\xffffffff'" L' escape_sequence character character character character ') < (subscript_expression "local_48[-2]" identifier [ number_literal ])) )) (compound_statement "{\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }" { (labeled_statement "std::wstring::_M_leak_hard((wstring *)&local_48);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_leak_hard((wstring *)&local_48);" statement_identifier : (ERROR ":" :) (expression_statement "_M_leak_hard((wstring *)&local_48);" (call_expression "_M_leak_hard((wstring *)&local_48)" identifier (argument_list "((wstring *)&local_48)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) ))) ;))) })) (expression_statement "pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11);" (assignment_expression "pwVar8 = __add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11)" identifier = (binary_expression "__add_grouping<wchar_t>(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11)" (binary_expression "__add_grouping<wchar_t" identifier < identifier) > (parenthesized_expression "(local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11)" ( (comma_expression "local_48,wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11" identifier , (comma_expression "wVar2,pcVar3,uVar13,pwVar16,pwVar16 + uVar11" identifier , (comma_expression "pcVar3,uVar13,pwVar16,pwVar16 + uVar11" identifier , (comma_expression "uVar13,pwVar16,pwVar16 + uVar11" identifier , (comma_expression "pwVar16,pwVar16 + uVar11" identifier , (binary_expression "pwVar16 + uVar11" identifier + identifier)))))) )))) ;) (if_statement "if (L'\xffffffff' < local_48[-2]) {\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }" if (parenthesized_expression "(L'\xffffffff' < local_48[-2])" ( (binary_expression "L'\xffffffff' < local_48[-2]" (char_literal "L'\xffffffff'" L' escape_sequence character character character character ') < (subscript_expression "local_48[-2]" identifier [ number_literal ])) )) (compound_statement "{\n                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */\n          std::wstring::_M_leak_hard((wstring *)&local_48);\n        }" { comment (labeled_statement "std::wstring::_M_leak_hard((wstring *)&local_48);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_leak_hard((wstring *)&local_48);" statement_identifier : (ERROR ":" :) (expression_statement "_M_leak_hard((wstring *)&local_48);" (call_expression "_M_leak_hard((wstring *)&local_48)" identifier (argument_list "((wstring *)&local_48)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) ))) ;))) })) (expression_statement "uVar13 = (long)pwVar8 - (long)local_48 >> 2;" (assignment_expression "uVar13 = (long)pwVar8 - (long)local_48 >> 2" identifier = (binary_expression "(long)pwVar8 - (long)local_48 >> 2" (binary_expression "(long)pwVar8 - (long)local_48" (cast_expression "(long)pwVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)local_48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (*(ulong *)(local_48 + -6) < uVar13) {\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }" if (parenthesized_expression "(*(ulong *)(local_48 + -6) < uVar13)" ( (binary_expression "*(ulong *)(local_48 + -6) < uVar13" (pointer_expression "*(ulong *)(local_48 + -6)" * (cast_expression "(ulong *)(local_48 + -6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -6)" ( (binary_expression "local_48 + -6" identifier + number_literal) )))) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          __throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);\n        }" { comment (expression_statement "__throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13);" (call_expression "__throw_out_of_range_fmt\n                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",\n                     uVar13)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::erase"" " string_content ") , identifier ))) ;) })) (labeled_statement "std::wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);" statement_identifier : (ERROR ":" :) (expression_statement "_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0);" (call_expression "_M_mutate((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0)" identifier (argument_list "((wstring *)&local_48,uVar13,*(ulong *)(local_48 + -6) - uVar13,0)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , identifier , (binary_expression "*(ulong *)(local_48 + -6) - uVar13" (pointer_expression "*(ulong *)(local_48 + -6)" * (cast_expression "(ulong *)(local_48 + -6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -6)" ( (binary_expression "local_48 + -6" identifier + number_literal) )))) - identifier) , number_literal ))) ;))) }))) (expression_statement "iVar4 = *(int *)(lVar9 + 0x60);" (assignment_expression "iVar4 = *(int *)(lVar9 + 0x60)" identifier = (pointer_expression "*(int *)(lVar9 + 0x60)" * (cast_expression "(int *)(lVar9 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x60)" ( (binary_expression "lVar9 + 0x60" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar4) {\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));\n      if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }\n    }" if (parenthesized_expression "(0 < iVar4)" ( (binary_expression "0 < iVar4" number_literal < identifier) )) (compound_statement "{\n                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */\n      std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));\n      if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }\n    }" { comment (labeled_statement "std::wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));" statement_identifier : (ERROR ":" :) (expression_statement "push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24));" (call_expression "push_back((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24))" identifier (argument_list "((wstring *)&local_48,*(wchar_t *)(lVar9 + 0x24))" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (pointer_expression "*(wchar_t *)(lVar9 + 0x24)" * (cast_expression "(wchar_t *)(lVar9 + 0x24)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x24)" ( (binary_expression "lVar9 + 0x24" identifier + number_literal) )))) ))) ;))) (if_statement "if ((long)uVar11 < 0) {\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }\n      else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }" if (parenthesized_expression "((long)uVar11 < 0)" ( (binary_expression "(long)uVar11 < 0" (cast_expression "(long)uVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n        std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));\n        std::wstring::append((wstring *)&local_48,pwVar16,uVar15);\n      }" { (labeled_statement "std::wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70));" (call_expression "append((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70))" identifier (argument_list "((wstring *)&local_48,-uVar11,*(wchar_t *)(lVar9 + 0x70))" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (unary_expression "-uVar11" - identifier) , (pointer_expression "*(wchar_t *)(lVar9 + 0x70)" * (cast_expression "(wchar_t *)(lVar9 + 0x70)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x70)" ( (binary_expression "lVar9 + 0x70" identifier + number_literal) )))) ))) ;))) (labeled_statement "std::wstring::append((wstring *)&local_48,pwVar16,uVar15);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)&local_48,pwVar16,uVar15);" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)&local_48,pwVar16,uVar15);" (call_expression "append((wstring *)&local_48,pwVar16,uVar15)" identifier (argument_list "((wstring *)&local_48,pwVar16,uVar15)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , identifier , identifier ))) ;))) }) (else_clause "else {\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }" else (compound_statement "{\n        std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));\n      }" { (labeled_statement "std::wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60));" (call_expression "append((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60))" identifier (argument_list "((wstring *)&local_48,pwVar16 + uVar11,(long)*(int *)(lVar9 + 0x60))" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (binary_expression "pwVar16 + uVar11" identifier + identifier) , (cast_expression "(long)*(int *)(lVar9 + 0x60)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(lVar9 + 0x60)" * (cast_expression "(int *)(lVar9 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x60)" ( (binary_expression "lVar9 + 0x60" identifier + number_literal) ))))) ))) ;))) }))) })) (expression_statement "uVar14 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar14 = *(uint *)(param_4 + 0x18) & 0xb0" identifier = (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_78 = *(long *)(local_48 + -6) + uVar6;" (assignment_expression "local_78 = *(long *)(local_48 + -6) + uVar6" identifier = (binary_expression "*(long *)(local_48 + -6) + uVar6" (pointer_expression "*(long *)(local_48 + -6)" * (cast_expression "(long *)(local_48 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -6)" ( (binary_expression "local_48 + -6" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar9 + 0x38);\n    }" if (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" ( (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" ( (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      local_78 = local_78 + *(long *)(lVar9 + 0x38);\n    }" { (expression_statement "local_78 = local_78 + *(long *)(lVar9 + 0x38);" (assignment_expression "local_78 = local_78 + *(long *)(lVar9 + 0x38)" identifier = (binary_expression "local_78 + *(long *)(lVar9 + 0x38)" identifier + (pointer_expression "*(long *)(lVar9 + 0x38)" * (cast_expression "(long *)(lVar9 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x38)" ( (binary_expression "lVar9 + 0x38" identifier + number_literal) )))))) ;) })) (expression_statement "local_40[0] = &DAT_0068b618;" (assignment_expression "local_40[0] = &DAT_0068b618" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (pointer_expression "&DAT_0068b618" & identifier)) ;) comment (labeled_statement "std::wstring::reserve((wstring *)local_40,local_78 * 2);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::reserve((wstring *)local_40,local_78 * 2);" statement_identifier : (ERROR ":" :) (expression_statement "reserve((wstring *)local_40,local_78 * 2);" (call_expression "reserve((wstring *)local_40,local_78 * 2)" identifier (argument_list "((wstring *)local_40,local_78 * 2)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "local_78 * 2" identifier * number_literal) ))) ;))) (expression_statement "uVar15 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar15 = *(ulong *)(param_4 + 0x10)" identifier = (pointer_expression "*(ulong *)(param_4 + 0x10)" * (cast_expression "(ulong *)(param_4 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "ppwVar12 = (wchar_t **)local_4c;" (assignment_expression "ppwVar12 = (wchar_t **)local_4c" identifier = (cast_expression "(wchar_t **)local_4c" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "bVar10 = uVar14 == 0x10 && local_78 < uVar15;" (assignment_expression "bVar10 = uVar14 == 0x10 && local_78 < uVar15" identifier = (binary_expression "uVar14 == 0x10 && local_78 < uVar15" (binary_expression "uVar14 == 0x10" identifier == number_literal) && (binary_expression "local_78 < uVar15" identifier < identifier))) ;) (do_statement "do {\n      switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }\n      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);\n    } while (ppwVar12 != &local_48);" do (compound_statement "{\n      switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }\n      ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);\n    }" { (switch_statement "switch(*(undefined1 *)ppwVar12) {\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }" switch (parenthesized_expression "(*(undefined1 *)ppwVar12)" ( (pointer_expression "*(undefined1 *)ppwVar12" * (cast_expression "(undefined1 *)ppwVar12" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;\n      case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);\n      }" { (case_statement "case 0:\n        if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }\n        break;" case number_literal : (if_statement "if (bVar10) {\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\nLAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);\n        }" { (labeled_statement "LAB_004ed01b:\n          std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);" statement_identifier : (labeled_statement "std::wstring::append((wstring *)local_40,uVar15 - local_78,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)local_40,uVar15 - local_78,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)local_40,uVar15 - local_78,param_5);" (call_expression "append((wstring *)local_40,uVar15 - local_78,param_5)" identifier (argument_list "((wstring *)local_40,uVar15 - local_78,param_5)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar15 - local_78" identifier - identifier) , identifier ))) ;)))) })) (break_statement "break;" break ;)) (case_statement "case 1:\n        if (bVar10) goto LAB_004ed01b;\n                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */\n        std::wstring::push_back((wstring *)local_40,param_5);\n        break;" case number_literal : (if_statement "if (bVar10) goto LAB_004ed01b;" if (parenthesized_expression "(bVar10)" ( identifier )) (goto_statement "goto LAB_004ed01b;" goto statement_identifier ;)) comment (labeled_statement "std::wstring::push_back((wstring *)local_40,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::push_back((wstring *)local_40,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "push_back((wstring *)local_40,param_5);" (call_expression "push_back((wstring *)local_40,param_5)" identifier (argument_list "((wstring *)local_40,param_5)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;))) (break_statement "break;" break ;)) (case_statement "case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }\n        break;" case number_literal : (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }" if (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" ( (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" ( (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" * (cast_expression "(byte *)(param_4 + 0x19)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));\n        }" { (labeled_statement "std::wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));" statement_identifier : (ERROR ":" :) (expression_statement "append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38));" (call_expression "append\n                    ((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38))" identifier (argument_list "((wstring *)local_40,*(wchar_t **)(lVar9 + 0x30),*(ulong *)(lVar9 + 0x38))" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (pointer_expression "*(wchar_t **)(lVar9 + 0x30)" * (cast_expression "(wchar_t **)(lVar9 + 0x30)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar9 + 0x30)" ( (binary_expression "lVar9 + 0x30" identifier + number_literal) )))) , (pointer_expression "*(ulong *)(lVar9 + 0x38)" * (cast_expression "(ulong *)(lVar9 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x38)" ( (binary_expression "lVar9 + 0x38" identifier + number_literal) )))) ))) ;))) })) (break_statement "break;" break ;)) (case_statement "case 3:\n        if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }\n        break;" case number_literal : (if_statement "if (uVar6 != 0) {\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n          std::wstring::push_back((wstring *)local_40,*local_90);\n        }" { (labeled_statement "std::wstring::push_back((wstring *)local_40,*local_90);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::push_back((wstring *)local_40,*local_90);" statement_identifier : (ERROR ":" :) (expression_statement "push_back((wstring *)local_40,*local_90);" (call_expression "push_back((wstring *)local_40,*local_90)" identifier (argument_list "((wstring *)local_40,*local_90)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (pointer_expression "*local_90" * identifier) ))) ;))) })) (break_statement "break;" break ;)) (case_statement "case 4:\n        std::wstring::append((wstring *)local_40,(wstring *)&local_48);" case number_literal : (labeled_statement "std::wstring::append((wstring *)local_40,(wstring *)&local_48);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)local_40,(wstring *)&local_48);" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)local_40,(wstring *)&local_48);" (call_expression "append((wstring *)local_40,(wstring *)&local_48)" identifier (argument_list "((wstring *)local_40,(wstring *)&local_48)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) ))) ;)))) })) (expression_statement "ppwVar12 = (wchar_t **)((long)ppwVar12 + 1);" (assignment_expression "ppwVar12 = (wchar_t **)((long)ppwVar12 + 1)" identifier = (cast_expression "(wchar_t **)((long)ppwVar12 + 1)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)ppwVar12 + 1)" ( (binary_expression "(long)ppwVar12 + 1" (cast_expression "(long)ppwVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(ppwVar12 != &local_48)" ( (binary_expression "ppwVar12 != &local_48" identifier != (pointer_expression "&local_48" & identifier)) )) ;) (if_statement "if (1 < uVar6) {\n      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);\n    }" if (parenthesized_expression "(1 < uVar6)" ( (binary_expression "1 < uVar6" number_literal < identifier) )) (compound_statement "{\n      std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);\n    }" { (labeled_statement "std::wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)local_40,local_90 + 1,uVar6 - 1);" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)local_40,local_90 + 1,uVar6 - 1);" (call_expression "append((wstring *)local_40,local_90 + 1,uVar6 - 1)" identifier (argument_list "((wstring *)local_40,local_90 + 1,uVar6 - 1)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "local_90 + 1" identifier + number_literal) , (binary_expression "uVar6 - 1" identifier - number_literal) ))) ;))) })) (expression_statement "uVar6 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar6 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (uVar6 < uVar15) {\n      if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar15)" ( (binary_expression "uVar6 < uVar15" identifier < identifier) )) (compound_statement "{\n      if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n    }" { (if_statement "if (uVar14 == 0x20) {\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }\n      else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }" if (parenthesized_expression "(uVar14 == 0x20)" ( (binary_expression "uVar14 == 0x20" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */\n        std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }" { comment (labeled_statement "std::wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::append((wstring *)local_40,uVar15 - uVar6,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "append((wstring *)local_40,uVar15 - uVar6,param_5);" (call_expression "append((wstring *)local_40,uVar15 - uVar6,param_5)" identifier (argument_list "((wstring *)local_40,uVar15 - uVar6,param_5)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar15 - uVar6" identifier - identifier) , identifier ))) ;))) (expression_statement "uVar6 = uVar15;" (assignment_expression "uVar6 = uVar15" identifier = identifier) ;) }) (else_clause "else {\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }" else (compound_statement "{\n        std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);\n        uVar6 = uVar15;\n      }" { (labeled_statement "std::wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5);" (call_expression "_M_replace_aux((wstring *)local_40,0,0,uVar15 - uVar6,param_5)" identifier (argument_list "((wstring *)local_40,0,0,uVar15 - uVar6,param_5)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal , number_literal , (binary_expression "uVar15 - uVar6" identifier - identifier) , identifier ))) ;))) (expression_statement "uVar6 = uVar15;" (assignment_expression "uVar6 = uVar15" identifier = identifier) ;) }))) })) (if_statement "if (local_9d == '\0') {\n      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);\n      local_9d = (int)uVar6 != lVar9;\n    }" if (parenthesized_expression "(local_9d == '\0')" ( (binary_expression "local_9d == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);\n      local_9d = (int)uVar6 != lVar9;\n    }" { (expression_statement "lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6);" (assignment_expression "lVar9 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6)" identifier = (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar6)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" ( (pointer_expression "**(code **)(*param_2 + 0x60)" * (pointer_expression "*(code **)(*param_2 + 0x60)" * (cast_expression "(code **)(*param_2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x60)" ( (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,local_40[0],(long)(int)uVar6)" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , (cast_expression "(long)(int)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "local_9d = (int)uVar6 != lVar9;" (assignment_expression "local_9d = (int)uVar6 != lVar9" identifier = (binary_expression "(int)uVar6 != lVar9" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) != identifier)) ;) })) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" identifier = (binary_expression "param_3 & 0xffffffffffffff00" identifier & number_literal)) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8)" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bcd8" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_0067bcd8" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(local_40[0] + -0x18));" (call_expression "_M_dispose((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) (if_statement "if ((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));\n    }" if (parenthesized_expression "((allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8)" ( (binary_expression "(allocator *)(local_48 + -6) != (allocator *)PTR__S_empty_rep_storage_0067bcd8" (cast_expression "(allocator *)(local_48 + -6)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -6)" ( (binary_expression "local_48 + -6" identifier + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_0067bcd8" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));\n    }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(local_48 + -6));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(local_48 + -6));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(local_48 + -6));" (call_expression "_M_dispose((allocator *)(local_48 + -6))" identifier (argument_list "((allocator *)(local_48 + -6))" ( (cast_expression "(allocator *)(local_48 + -6)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -6)" ( (binary_expression "local_48 + -6" identifier + number_literal) ))) ))) ;)))) })) })) (expression_statement "auVar17._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar17._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar17._9_7_" identifier . field_identifier) = (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(param_3 >> 8)" ( (binary_expression "param_3 >> 8" identifier >> number_literal) )))) ;) (expression_statement "auVar17[8] = local_9d;" (assignment_expression "auVar17[8] = local_9d" (subscript_expression "auVar17[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" * (cast_expression "(undefined8 *)(param_4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar17._0_8_ = param_2;" (assignment_expression "auVar17._0_8_ = param_2" (field_expression "auVar17._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar17;" return identifier ;) }))
(translation_unit "undefined1  [16]\nFUN_004ecd30(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  bool bVar12;\n  long lVar13;\n  undefined **ppuVar14;\n  ulong uVar15;\n  ulong uVar16;\n  uint uVar17;\n  int *piVar18;\n  undefined1 auVar19 [16];\n  char local_9d;\n  undefined4 *local_90;\n  ulong local_78;\n  undefined1 local_4d;\n  undefined1 local_4c [4];\n  undefined *local_48;\n  undefined *local_40 [2];\n  \n  local_9d = (char)param_3;\n  plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);\n  lVar8 = FUN_004a0a70(&DAT_0068b4e8);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);\n  lVar10 = *plVar1;\n  if (lVar10 == 0) {\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    \n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }\n  piVar3 = (int *)*param_6;\n  piVar18 = piVar3;\n  if (*piVar3 == *(int *)(lVar10 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }\n  lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));\n  lVar8 = lVar8 - (long)piVar18 >> 2;\n  if (lVar8 != 0) {\n    local_48 = &DAT_0068b618;\n                    \n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    \n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }\n  auVar19._9_7_ = (int7)(param_3 >> 8);\n  auVar19[8] = local_9d;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar19._0_8_ = param_2;\n  return auVar19;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (declaration "FUN_004ecd30(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;" (macro_type_specifier "FUN_004ecd30(undefined8" identifier ( (type_descriptor "undefined8" type_identifier) )) identifier , (ERROR "long" identifier) (pointer_declarator "*param_2" * identifier) , (ERROR "ulong" identifier) identifier , (ERROR "long" identifier) identifier , identifier (ERROR "param_5" identifier) , (ERROR "undefined8 *param_6)\n\n{\n  long" identifier (pointer_declarator "*param_6" * identifier) ) { long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined **ppuVar14;" type_identifier (pointer_declarator "**ppuVar14" * (pointer_declarator "*ppuVar14" * identifier)) ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "ulong uVar16;" type_identifier identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int *piVar18;" primitive_type (pointer_declarator "*piVar18" * identifier) ;) (declaration "undefined1 auVar19 [16];" type_identifier (array_declarator "auVar19 [16]" identifier [ number_literal ]) ;) (declaration "char local_9d;" primitive_type identifier ;) (declaration "undefined4 *local_90;" type_identifier (pointer_declarator "*local_90" * identifier) ;) (declaration "ulong local_78;" type_identifier identifier ;) (declaration "undefined1 local_4d;" type_identifier identifier ;) (declaration "undefined1 local_4c [4];" type_identifier (array_declarator "local_4c [4]" identifier [ number_literal ]) ;) (declaration "undefined *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined *local_40 [2];" type_identifier (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (expression_statement "local_9d = (char)param_3;" (assignment_expression "local_9d = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);" (assignment_expression "plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0)" identifier = (cast_expression "(long *)FUN_004eacf0(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_004eacf0(param_4 + 0xd0)" identifier (argument_list "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) ))))) ;) (expression_statement "lVar8 = FUN_004a0a70(&DAT_0068b4e8);" (assignment_expression "lVar8 = FUN_004a0a70(&DAT_0068b4e8)" identifier = (call_expression "FUN_004a0a70(&DAT_0068b4e8)" identifier (argument_list "(&DAT_0068b4e8)" ( (pointer_expression "&DAT_0068b4e8" & identifier) )))) ;) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" identifier = (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" * (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" ( (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" * (cast_expression "(long *)(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "lVar8 * 8" identifier * number_literal)) )))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (if_statement "if (lVar10 == 0) {\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    \n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }" if (parenthesized_expression "(lVar10 == 0)" ( (binary_expression "lVar10 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    \n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }" { (expression_statement "puVar11 = (undefined8 *)FUN_0049cb60(0xa0);" (assignment_expression "puVar11 = (undefined8 *)FUN_0049cb60(0xa0)" identifier = (cast_expression "(undefined8 *)FUN_0049cb60(0xa0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049cb60(0xa0)" identifier (argument_list "(0xa0)" ( number_literal ))))) ;) (expression_statement "*(undefined4 *)(puVar11 + 1) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 1) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 1)" * (cast_expression "(undefined4 *)(puVar11 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 1)" ( (binary_expression "puVar11 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[2] = 0;" (assignment_expression "puVar11[2] = 0" (subscript_expression "puVar11[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[3] = 0;" (assignment_expression "puVar11[3] = 0" (subscript_expression "puVar11[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar11 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar11 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar11 + 4)" * (cast_expression "(undefined1 *)(puVar11 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 4)" ( (binary_expression "puVar11 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*puVar11 = &PTR_FUN_00679350;" (assignment_expression "*puVar11 = &PTR_FUN_00679350" (pointer_expression "*puVar11" * identifier) = (pointer_expression "&PTR_FUN_00679350" & identifier)) ;) (expression_statement "*(undefined8 *)((long)puVar11 + 0x24) = 0;" (assignment_expression "*(undefined8 *)((long)puVar11 + 0x24) = 0" (pointer_expression "*(undefined8 *)((long)puVar11 + 0x24)" * (cast_expression "(undefined8 *)((long)puVar11 + 0x24)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar11 + 0x24)" ( (binary_expression "(long)puVar11 + 0x24" (cast_expression "(long)puVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[6] = 0;" (assignment_expression "puVar11[6] = 0" (subscript_expression "puVar11[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[7] = 0;" (assignment_expression "puVar11[7] = 0" (subscript_expression "puVar11[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[8] = 0;" (assignment_expression "puVar11[8] = 0" (subscript_expression "puVar11[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[9] = 0;" (assignment_expression "puVar11[9] = 0" (subscript_expression "puVar11[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[10] = 0;" (assignment_expression "puVar11[10] = 0" (subscript_expression "puVar11[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[0xb] = 0;" (assignment_expression "puVar11[0xb] = 0" (subscript_expression "puVar11[0xb]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[0xc] = 0;" (assignment_expression "puVar11[0xc] = 0" (subscript_expression "puVar11[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)(puVar11 + 0xd) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 0xd) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 0xd)" * (cast_expression "(undefined4 *)(puVar11 + 0xd)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xd)" ( (binary_expression "puVar11 + 0xd" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar11 + 0x13) = 0;" (assignment_expression "*(undefined1 *)(puVar11 + 0x13) = 0" (pointer_expression "*(undefined1 *)(puVar11 + 0x13)" * (cast_expression "(undefined1 *)(puVar11 + 0x13)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0x13)" ( (binary_expression "puVar11 + 0x13" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_004eb7d0(puVar11,param_4 + 0xd0);" (call_expression "FUN_004eb7d0(puVar11,param_4 + 0xd0)" identifier (argument_list "(puVar11,param_4 + 0xd0)" ( identifier , (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);" (call_expression "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8)" identifier (argument_list "(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8)" ( (pointer_expression "*(undefined8 *)(param_4 + 0xd0)" * (cast_expression "(undefined8 *)(param_4 + 0xd0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) , identifier , identifier ))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) })) (expression_statement "piVar3 = (int *)*param_6;" (assignment_expression "piVar3 = (int *)*param_6" identifier = (cast_expression "(int *)*param_6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_6" * identifier))) ;) (expression_statement "piVar18 = piVar3;" (assignment_expression "piVar18 = piVar3" identifier = identifier) ;) (if_statement "if (*piVar3 == *(int *)(lVar10 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" if (parenthesized_expression "(*piVar3 == *(int *)(lVar10 + 0x6c))" ( (binary_expression "*piVar3 == *(int *)(lVar10 + 0x6c)" (pointer_expression "*piVar3" * identifier) == (pointer_expression "*(int *)(lVar10 + 0x6c)" * (cast_expression "(int *)(lVar10 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x6c)" ( (binary_expression "lVar10 + 0x6c" identifier + number_literal) ))))) )) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x68)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x68)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 0x68)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 0x68)" ( (binary_expression "lVar10 + 0x68" identifier + number_literal) ))))) ;) (expression_statement "local_90 = *(undefined4 **)(lVar10 + 0x50);" (assignment_expression "local_90 = *(undefined4 **)(lVar10 + 0x50)" identifier = (pointer_expression "*(undefined4 **)(lVar10 + 0x50)" * (cast_expression "(undefined4 **)(lVar10 + 0x50)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x50)" ( (binary_expression "lVar10 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "uVar15 = *(ulong *)(lVar10 + 0x58);" (assignment_expression "uVar15 = *(ulong *)(lVar10 + 0x58)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x58)" * (cast_expression "(ulong *)(lVar10 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }" if (parenthesized_expression "(*(long *)(piVar3 + -6) != 0)" ( (binary_expression "*(long *)(piVar3 + -6) != 0" (pointer_expression "*(long *)(piVar3 + -6)" * (cast_expression "(long *)(piVar3 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + -6)" ( (binary_expression "piVar3 + -6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      piVar18 = piVar3 + 1;\n    }" { (expression_statement "piVar18 = piVar3 + 1;" (assignment_expression "piVar18 = piVar3 + 1" identifier = (binary_expression "piVar3 + 1" identifier + number_literal)) ;) })) }) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" else (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 100);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 100)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 100)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 100)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 100)" ( (binary_expression "lVar10 + 100" identifier + number_literal) ))))) ;) (expression_statement "local_90 = *(undefined4 **)(lVar10 + 0x40);" (assignment_expression "local_90 = *(undefined4 **)(lVar10 + 0x40)" identifier = (pointer_expression "*(undefined4 **)(lVar10 + 0x40)" * (cast_expression "(undefined4 **)(lVar10 + 0x40)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x40)" ( (binary_expression "lVar10 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar15 = *(ulong *)(lVar10 + 0x48);" (assignment_expression "uVar15 = *(ulong *)(lVar10 + 0x48)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x48)" * (cast_expression "(ulong *)(lVar10 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x48)" ( (binary_expression "lVar10 + 0x48" identifier + number_literal) ))))) ;) }))) (expression_statement "lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));" (assignment_expression "lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" identifier = (call_expression "(**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" (parenthesized_expression "(**(code **)(*plVar7 + 0x28))" ( (pointer_expression "**(code **)(*plVar7 + 0x28)" * (pointer_expression "*(code **)(*plVar7 + 0x28)" * (cast_expression "(code **)(*plVar7 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar7 + 0x28)" ( (binary_expression "*plVar7 + 0x28" (pointer_expression "*plVar7" * identifier) + number_literal) ))))) )) (argument_list "(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" ( identifier , number_literal , identifier , (binary_expression "piVar18 + *(long *)(piVar3 + -6)" identifier + (pointer_expression "*(long *)(piVar3 + -6)" * (cast_expression "(long *)(piVar3 + -6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + -6)" ( (binary_expression "piVar3 + -6" identifier + number_literal) ))))) )))) ;) (expression_statement "lVar8 = lVar8 - (long)piVar18 >> 2;" (assignment_expression "lVar8 = lVar8 - (long)piVar18 >> 2" identifier = (binary_expression "lVar8 - (long)piVar18 >> 2" (binary_expression "lVar8 - (long)piVar18" identifier - (cast_expression "(long)piVar18" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (lVar8 != 0) {\n    local_48 = &DAT_0068b618;\n                    \n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    \n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }" if (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) (compound_statement "{\n    local_48 = &DAT_0068b618;\n                    \n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    \n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }" { (expression_statement "local_48 = &DAT_0068b618;" (assignment_expression "local_48 = &DAT_0068b618" identifier = (pointer_expression "&DAT_0068b618" & identifier)) ;) (expression_statement "FUN_0051a0b0(&local_48,lVar8 * 2);" (call_expression "FUN_0051a0b0(&local_48,lVar8 * 2)" identifier (argument_list "(&local_48,lVar8 * 2)" ( (pointer_expression "&local_48" & identifier) , (binary_expression "lVar8 * 2" identifier * number_literal) ))) ;) (expression_statement "iVar6 = *(int *)(lVar10 + 0x60);" (assignment_expression "iVar6 = *(int *)(lVar10 + 0x60)" identifier = (pointer_expression "*(int *)(lVar10 + 0x60)" * (cast_expression "(int *)(lVar10 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ;) (expression_statement "lVar13 = lVar8 - iVar6;" (assignment_expression "lVar13 = lVar8 - iVar6" identifier = (binary_expression "lVar8 - iVar6" identifier - identifier)) ;) (if_statement "if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }" if (parenthesized_expression "(0 < lVar13)" ( (binary_expression "0 < lVar13" number_literal < identifier) )) (compound_statement "{\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }" { (if_statement "if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (compound_statement "{\n        lVar13 = lVar8;\n      }" { (expression_statement "lVar13 = lVar8;" (assignment_expression "lVar13 = lVar8" identifier = identifier) ;) })) (if_statement "if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" if (parenthesized_expression "(*(long *)(lVar10 + 0x18) == 0)" ( (binary_expression "*(long *)(lVar10 + 0x18) == 0" (pointer_expression "*(long *)(lVar10 + 0x18)" * (cast_expression "(long *)(lVar10 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }" { (expression_statement "FUN_00519bc0(&local_48,piVar18,lVar13);" (call_expression "FUN_00519bc0(&local_48,piVar18,lVar13)" identifier (argument_list "(&local_48,piVar18,lVar13)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" else (compound_statement "{\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" { (expression_statement "FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);" (call_expression "FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0)" identifier (argument_list "(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0)" ( (pointer_expression "&local_48" & identifier) , number_literal , (pointer_expression "*(undefined8 *)(local_48 + -0x18)" * (cast_expression "(undefined8 *)(local_48 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) , (binary_expression "lVar13 * 2" identifier * number_literal) , number_literal ))) ;) (expression_statement "uVar4 = *(undefined8 *)(lVar10 + 0x18);" (assignment_expression "uVar4 = *(undefined8 *)(lVar10 + 0x18)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x18)" * (cast_expression "(undefined8 *)(lVar10 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(undefined8 *)(lVar10 + 0x10);" (assignment_expression "uVar5 = *(undefined8 *)(lVar10 + 0x10)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x10)" * (cast_expression "(undefined8 *)(lVar10 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x10)" ( (binary_expression "lVar10 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(undefined4 *)(lVar10 + 0x28);" (assignment_expression "uVar2 = *(undefined4 *)(lVar10 + 0x28)" identifier = (pointer_expression "*(undefined4 *)(lVar10 + 0x28)" * (cast_expression "(undefined4 *)(lVar10 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x28)" ( (binary_expression "lVar10 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }" if (parenthesized_expression "(-1 < *(int *)(local_48 + -8))" ( (binary_expression "-1 < *(int *)(local_48 + -8)" number_literal < (pointer_expression "*(int *)(local_48 + -8)" * (cast_expression "(int *)(local_48 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -8)" ( (binary_expression "local_48 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n          FUN_00519690(&local_48);\n        }" { (expression_statement "FUN_00519690(&local_48);" (call_expression "FUN_00519690(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) })) (expression_statement "lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);" (assignment_expression "lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" identifier = (call_expression "FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" identifier (argument_list "(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" ( identifier , identifier , identifier , identifier , identifier , (binary_expression "piVar18 + lVar13" identifier + identifier) )))) ;) (if_statement "if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }" if (parenthesized_expression "(-1 < *(int *)(local_48 + -8))" ( (binary_expression "-1 < *(int *)(local_48 + -8)" number_literal < (pointer_expression "*(int *)(local_48 + -8)" * (cast_expression "(int *)(local_48 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -8)" ( (binary_expression "local_48 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n          FUN_00519690(&local_48);\n        }" { (expression_statement "FUN_00519690(&local_48);" (call_expression "FUN_00519690(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) })) (expression_statement "uVar16 = lVar9 - (long)local_48 >> 2;" (assignment_expression "uVar16 = lVar9 - (long)local_48 >> 2" identifier = (binary_expression "lVar9 - (long)local_48 >> 2" (binary_expression "lVar9 - (long)local_48" identifier - (cast_expression "(long)local_48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }" if (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar16)" ( (binary_expression "*(ulong *)(local_48 + -0x18) < uVar16" (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) < identifier) )) (compound_statement "{\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }" { (expression_statement "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);" (call_expression "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::erase"" " string_content ") , identifier ))) ;) })) (expression_statement "FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);" (call_expression "FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0)" identifier (argument_list "(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0)" ( (pointer_expression "&local_48" & identifier) , identifier , (binary_expression "*(ulong *)(local_48 + -0x18) - uVar16" (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) - identifier) , number_literal ))) ;) }))) (expression_statement "iVar6 = *(int *)(lVar10 + 0x60);" (assignment_expression "iVar6 = *(int *)(lVar10 + 0x60)" identifier = (pointer_expression "*(int *)(lVar10 + 0x60)" * (cast_expression "(int *)(lVar10 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }" { (expression_statement "FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));" (call_expression "FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24))" identifier (argument_list "(&local_48,*(undefined4 *)(lVar10 + 0x24))" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*(undefined4 *)(lVar10 + 0x24)" * (cast_expression "(undefined4 *)(lVar10 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x24)" ( (binary_expression "lVar10 + 0x24" identifier + number_literal) )))) ))) ;) (if_statement "if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" if (parenthesized_expression "(lVar13 < 0)" ( (binary_expression "lVar13 < 0" identifier < number_literal) )) (compound_statement "{\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }" { (expression_statement "FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));" (call_expression "FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70))" identifier (argument_list "(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70))" ( (pointer_expression "&local_48" & identifier) , (unary_expression "-lVar13" - identifier) , (pointer_expression "*(undefined4 *)(lVar10 + 0x70)" * (cast_expression "(undefined4 *)(lVar10 + 0x70)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x70)" ( (binary_expression "lVar10 + 0x70" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_0051a320(&local_48,piVar18,lVar8);" (call_expression "FUN_0051a320(&local_48,piVar18,lVar8)" identifier (argument_list "(&local_48,piVar18,lVar8)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" else (compound_statement "{\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" { (expression_statement "FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));" (call_expression "FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60))" identifier (argument_list "(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60))" ( (pointer_expression "&local_48" & identifier) , (binary_expression "piVar18 + lVar13" identifier + identifier) , (cast_expression "(long)*(int *)(lVar10 + 0x60)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(lVar10 + 0x60)" * (cast_expression "(int *)(lVar10 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ))) ;) }))) })) (expression_statement "uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar17 = *(uint *)(param_4 + 0x18) & 0xb0" identifier = (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_78 = *(long *)(local_48 + -0x18) + uVar15;" (assignment_expression "local_78 = *(long *)(local_48 + -0x18) + uVar15" identifier = (binary_expression "*(long *)(local_48 + -0x18) + uVar15" (pointer_expression "*(long *)(local_48 + -0x18)" * (cast_expression "(long *)(local_48 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }" if (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" ( (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" ( (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }" { (expression_statement "local_78 = local_78 + *(long *)(lVar10 + 0x38);" (assignment_expression "local_78 = local_78 + *(long *)(lVar10 + 0x38)" identifier = (binary_expression "local_78 + *(long *)(lVar10 + 0x38)" identifier + (pointer_expression "*(long *)(lVar10 + 0x38)" * (cast_expression "(long *)(lVar10 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x38)" ( (binary_expression "lVar10 + 0x38" identifier + number_literal) )))))) ;) })) (expression_statement "local_40[0] = &DAT_0068b618;" (assignment_expression "local_40[0] = &DAT_0068b618" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (pointer_expression "&DAT_0068b618" & identifier)) ;) (expression_statement "FUN_0051a0b0(local_40,local_78 * 2);" (call_expression "FUN_0051a0b0(local_40,local_78 * 2)" identifier (argument_list "(local_40,local_78 * 2)" ( identifier , (binary_expression "local_78 * 2" identifier * number_literal) ))) ;) (expression_statement "uVar16 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar16 = *(ulong *)(param_4 + 0x10)" identifier = (pointer_expression "*(ulong *)(param_4 + 0x10)" * (cast_expression "(ulong *)(param_4 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "ppuVar14 = (undefined **)local_4c;" (assignment_expression "ppuVar14 = (undefined **)local_4c" identifier = (cast_expression "(undefined **)local_4c" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "bVar12 = uVar17 == 0x10 && local_78 < uVar16;" (assignment_expression "bVar12 = uVar17 == 0x10 && local_78 < uVar16" identifier = (binary_expression "uVar17 == 0x10 && local_78 < uVar16" (binary_expression "uVar17 == 0x10" identifier == number_literal) && (binary_expression "local_78 < uVar16" identifier < identifier))) ;) (do_statement "do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);" do (compound_statement "{\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    }" { (switch_statement "switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }" switch (parenthesized_expression "(*(undefined1 *)ppuVar14)" ( (pointer_expression "*(undefined1 *)ppuVar14" * (cast_expression "(undefined1 *)ppuVar14" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }" { (case_statement "case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;" case number_literal : (if_statement "if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }" { (labeled_statement "LAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);" statement_identifier : (expression_statement "FUN_0051a4b0(local_40,uVar16 - local_78,param_5);" (call_expression "FUN_0051a4b0(local_40,uVar16 - local_78,param_5)" identifier (argument_list "(local_40,uVar16 - local_78,param_5)" ( identifier , (binary_expression "uVar16 - local_78" identifier - identifier) , identifier ))) ;)) })) (break_statement "break;" break ;)) (case_statement "case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;" case number_literal : (if_statement "if (bVar12) goto LAB_004ed01b;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_004ed01b;" goto statement_identifier ;)) (expression_statement "FUN_0051a5d0(local_40,param_5);" (call_expression "FUN_0051a5d0(local_40,param_5)" identifier (argument_list "(local_40,param_5)" ( identifier , identifier ))) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;" case number_literal : (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }" if (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" ( (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" ( (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" * (cast_expression "(byte *)(param_4 + 0x19)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }" { (expression_statement "FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));" (call_expression "FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38))" identifier (argument_list "(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38))" ( identifier , (pointer_expression "*(undefined8 *)(lVar10 + 0x30)" * (cast_expression "(undefined8 *)(lVar10 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x30)" ( (binary_expression "lVar10 + 0x30" identifier + number_literal) )))) , (pointer_expression "*(undefined8 *)(lVar10 + 0x38)" * (cast_expression "(undefined8 *)(lVar10 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x38)" ( (binary_expression "lVar10 + 0x38" identifier + number_literal) )))) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;" case number_literal : (if_statement "if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }" if (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) (compound_statement "{\n          FUN_0051a5d0(local_40,*local_90);\n        }" { (expression_statement "FUN_0051a5d0(local_40,*local_90);" (call_expression "FUN_0051a5d0(local_40,*local_90)" identifier (argument_list "(local_40,*local_90)" ( identifier , (pointer_expression "*local_90" * identifier) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 4:\n        FUN_0051a190(local_40,&local_48);" case number_literal : (expression_statement "FUN_0051a190(local_40,&local_48);" (call_expression "FUN_0051a190(local_40,&local_48)" identifier (argument_list "(local_40,&local_48)" ( identifier , (pointer_expression "&local_48" & identifier) ))) ;)) })) (expression_statement "ppuVar14 = (undefined **)((long)ppuVar14 + 1);" (assignment_expression "ppuVar14 = (undefined **)((long)ppuVar14 + 1)" identifier = (cast_expression "(undefined **)((long)ppuVar14 + 1)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)ppuVar14 + 1)" ( (binary_expression "(long)ppuVar14 + 1" (cast_expression "(long)ppuVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(ppuVar14 != &local_48)" ( (binary_expression "ppuVar14 != &local_48" identifier != (pointer_expression "&local_48" & identifier)) )) ;) (if_statement "if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }" if (parenthesized_expression "(1 < uVar15)" ( (binary_expression "1 < uVar15" number_literal < identifier) )) (compound_statement "{\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }" { (expression_statement "FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);" (call_expression "FUN_0051a320(local_40,local_90 + 1,uVar15 - 1)" identifier (argument_list "(local_40,local_90 + 1,uVar15 - 1)" ( identifier , (binary_expression "local_90 + 1" identifier + number_literal) , (binary_expression "uVar15 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar15 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar15 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }" if (parenthesized_expression "(uVar15 < uVar16)" ( (binary_expression "uVar15 < uVar16" identifier < identifier) )) (compound_statement "{\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }" { (if_statement "if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" if (parenthesized_expression "(uVar17 == 0x20)" ( (binary_expression "uVar17 == 0x20" identifier == number_literal) )) (compound_statement "{\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" { (expression_statement "FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);" (call_expression "FUN_0051a4b0(local_40,uVar16 - uVar15,param_5)" identifier (argument_list "(local_40,uVar16 - uVar15,param_5)" ( identifier , (binary_expression "uVar16 - uVar15" identifier - identifier) , identifier ))) ;) (expression_statement "uVar15 = uVar16;" (assignment_expression "uVar15 = uVar16" identifier = identifier) ;) }) (else_clause "else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" else (compound_statement "{\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" { (expression_statement "FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);" (call_expression "FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5)" identifier (argument_list "(local_40,0,0,uVar16 - uVar15,param_5)" ( identifier , number_literal , number_literal , (binary_expression "uVar16 - uVar15" identifier - identifier) , identifier ))) ;) (expression_statement "uVar15 = uVar16;" (assignment_expression "uVar15 = uVar16" identifier = identifier) ;) }))) })) (if_statement "if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }" if (parenthesized_expression "(local_9d == '\0')" ( (binary_expression "local_9d == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }" { (expression_statement "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);" (assignment_expression "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15)" identifier = (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" ( (pointer_expression "**(code **)(*param_2 + 0x60)" * (pointer_expression "*(code **)(*param_2 + 0x60)" * (cast_expression "(code **)(*param_2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x60)" ( (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,local_40[0],(long)(int)uVar15)" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , (cast_expression "(long)(int)uVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "local_9d = (int)uVar15 != lVar10;" (assignment_expression "local_9d = (int)uVar15 != lVar10" identifier = (binary_expression "(int)uVar15 != lVar10" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) != identifier)) ;) })) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" identifier = (binary_expression "param_3 & 0xffffffffffffff00" identifier & number_literal)) ;) (if_statement "if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }" if (parenthesized_expression "(local_40[0] + -0x18 != PTR_DAT_0067bcd8)" ( (binary_expression "local_40[0] + -0x18 != PTR_DAT_0067bcd8" (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }" { (expression_statement "FUN_004e8ab0(local_40[0] + -0x18,&local_4d);" (call_expression "FUN_004e8ab0(local_40[0] + -0x18,&local_4d)" identifier (argument_list "(local_40[0] + -0x18,&local_4d)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) (if_statement "if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }" if (parenthesized_expression "(local_48 + -0x18 != PTR_DAT_0067bcd8)" ( (binary_expression "local_48 + -0x18 != PTR_DAT_0067bcd8" (binary_expression "local_48 + -0x18" identifier + number_literal) != identifier) )) (compound_statement "{\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }" { (expression_statement "FUN_004e8ab0(local_48 + -0x18,&local_4d);" (call_expression "FUN_004e8ab0(local_48 + -0x18,&local_4d)" identifier (argument_list "(local_48 + -0x18,&local_4d)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) })) (expression_statement "auVar19._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar19._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar19._9_7_" identifier . field_identifier) = (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(param_3 >> 8)" ( (binary_expression "param_3 >> 8" identifier >> number_literal) )))) ;) (expression_statement "auVar19[8] = local_9d;" (assignment_expression "auVar19[8] = local_9d" (subscript_expression "auVar19[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" * (cast_expression "(undefined8 *)(param_4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar19._0_8_ = param_2;" (assignment_expression "auVar19._0_8_ = param_2" (field_expression "auVar19._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar19;" return identifier ;) (ERROR "}" }))
(translation_unit (expression_statement (subscript_expression IDENT [ LIT ]) ;) (declaration (macro_type_specifier IDENT ( (type_descriptor TYPE) )) IDENT , (ERROR IDENT) (pointer_declarator * IDENT) , (ERROR IDENT) IDENT , (ERROR IDENT) IDENT , IDENT (ERROR IDENT) , (ERROR IDENT (pointer_declarator * IDENT) ) { long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT , IDENT , (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT * LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , (binary_expression IDENT + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) , LIT ))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (unary_expression - IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression IDENT + IDENT) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;) }))) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression & IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT < IDENT))) ;) (do_statement do (compound_statement { (switch_statement switch (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (case_statement case LIT : (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT - IDENT) , IDENT ))) ;)) })) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) ))) ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (pointer_expression & IDENT)) )) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (binary_expression IDENT - LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT - IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT , (binary_expression IDENT - IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) , (pointer_expression & IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (return_statement return IDENT ;) (ERROR }))
(expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" (identifier "undefined1") ([ "[") (number_literal "16") (] "]")) (; "")) (declaration "FUN_004ecd30(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;" (macro_type_specifier "FUN_004ecd30(undefined8" (identifier "FUN_004ecd30") (( "(") (type_descriptor "undefined8" (type_identifier "undefined8")) () "")) (identifier "param_1") (, ",") (ERROR "long" (identifier "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2")) (, ",") (ERROR "ulong" (identifier "ulong")) (identifier "param_3") (, ",") (ERROR "long" (identifier "long")) (identifier "param_4") (, ",") (identifier "undefined4") (ERROR "param_5" (identifier "param_5")) (, ",") (ERROR "undefined8 *param_6)\n\n{\n  long" (identifier "undefined8") (pointer_declarator "*param_6" (* "*") (identifier "param_6")) () ")") ({ "{") (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "long lVar10;" (sized_type_specifier "long" (long "long")) (identifier "lVar10") (; ";")) (declaration "undefined8 *puVar11;" (type_identifier "undefined8") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "long lVar13;" (sized_type_specifier "long" (long "long")) (identifier "lVar13") (; ";")) (declaration "undefined **ppuVar14;" (type_identifier "undefined") (pointer_declarator "**ppuVar14" (* "*") (pointer_declarator "*ppuVar14" (* "*") (identifier "ppuVar14"))) (; ";")) (declaration "ulong uVar15;" (type_identifier "ulong") (identifier "uVar15") (; ";")) (declaration "ulong uVar16;" (type_identifier "ulong") (identifier "uVar16") (; ";")) (declaration "uint uVar17;" (type_identifier "uint") (identifier "uVar17") (; ";")) (declaration "int *piVar18;" (primitive_type "int") (pointer_declarator "*piVar18" (* "*") (identifier "piVar18")) (; ";")) (declaration "undefined1 auVar19 [16];" (type_identifier "undefined1") (array_declarator "auVar19 [16]" (identifier "auVar19") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "char local_9d;" (primitive_type "char") (identifier "local_9d") (; ";")) (declaration "undefined4 *local_90;" (type_identifier "undefined4") (pointer_declarator "*local_90" (* "*") (identifier "local_90")) (; ";")) (declaration "ulong local_78;" (type_identifier "ulong") (identifier "local_78") (; ";")) (declaration "undefined1 local_4d;" (type_identifier "undefined1") (identifier "local_4d") (; ";")) (declaration "undefined1 local_4c [4];" (type_identifier "undefined1") (array_declarator "local_4c [4]" (identifier "local_4c") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "undefined *local_48;" (type_identifier "undefined") (pointer_declarator "*local_48" (* "*") (identifier "local_48")) (; ";")) (declaration "undefined *local_40 [2];" (type_identifier "undefined") (pointer_declarator "*local_40 [2]" (* "*") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "local_9d = (char)param_3;" (assignment_expression "local_9d = (char)param_3" (identifier "local_9d") (= "=") (cast_expression "(char)param_3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_3"))) (; ";")) (expression_statement "plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);" (assignment_expression "plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0)" (identifier "plVar7") (= "=") (cast_expression "(long *)FUN_004eacf0(param_4 + 0xd0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_004eacf0(param_4 + 0xd0)" (identifier "FUN_004eacf0") (argument_list "(param_4 + 0xd0)" (( "(") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")"))))) (; ";")) (expression_statement "lVar8 = FUN_004a0a70(&DAT_0068b4e8);" (assignment_expression "lVar8 = FUN_004a0a70(&DAT_0068b4e8)" (identifier "lVar8") (= "=") (call_expression "FUN_004a0a70(&DAT_0068b4e8)" (identifier "FUN_004a0a70") (argument_list "(&DAT_0068b4e8)" (( "(") (pointer_expression "&DAT_0068b4e8" (& "&") (identifier "DAT_0068b4e8")) () ")")))) (; ";")) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" (identifier "plVar1") (= "=") (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8)" (( "(") (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" (* "*") (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" (( "(") (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" (* "*") (cast_expression "(long *)(param_4 + 0xd0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0xd0)" (( "(") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")")))) (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (binary_expression "lVar8 * 8" (identifier "lVar8") (* "*") (number_literal "8"))) () ")")))) (; ";")) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" (identifier "lVar10") (= "=") (pointer_expression "*plVar1" (* "*") (identifier "plVar1"))) (; ";")) (if_statement "if (lVar10 == 0) {\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    \n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }" (if "if") (parenthesized_expression "(lVar10 == 0)" (( "(") (binary_expression "lVar10 == 0" (identifier "lVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)(puVar11 + 4) = 0;\n    *puVar11 = &PTR_FUN_00679350;\n    *(undefined8 *)((long)puVar11 + 0x24) = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    puVar11[0xc] = 0;\n    *(undefined4 *)(puVar11 + 0xd) = 0;\n    *(undefined1 *)(puVar11 + 0x13) = 0;\n                    \n    FUN_004eb7d0(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);\n    lVar10 = *plVar1;\n  }" ({ "{") (expression_statement "puVar11 = (undefined8 *)FUN_0049cb60(0xa0);" (assignment_expression "puVar11 = (undefined8 *)FUN_0049cb60(0xa0)" (identifier "puVar11") (= "=") (cast_expression "(undefined8 *)FUN_0049cb60(0xa0)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0049cb60(0xa0)" (identifier "FUN_0049cb60") (argument_list "(0xa0)" (( "(") (number_literal "0xa0") () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(puVar11 + 1) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 1) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 1)" (* "*") (cast_expression "(undefined4 *)(puVar11 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 1)" (( "(") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[2] = 0;" (assignment_expression "puVar11[2] = 0" (subscript_expression "puVar11[2]" (identifier "puVar11") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[3] = 0;" (assignment_expression "puVar11[3] = 0" (subscript_expression "puVar11[3]" (identifier "puVar11") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(puVar11 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar11 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar11 + 4)" (* "*") (cast_expression "(undefined1 *)(puVar11 + 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 4)" (( "(") (binary_expression "puVar11 + 4" (identifier "puVar11") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar11 = &PTR_FUN_00679350;" (assignment_expression "*puVar11 = &PTR_FUN_00679350" (pointer_expression "*puVar11" (* "*") (identifier "puVar11")) (= "=") (pointer_expression "&PTR_FUN_00679350" (& "&") (identifier "PTR_FUN_00679350"))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar11 + 0x24) = 0;" (assignment_expression "*(undefined8 *)((long)puVar11 + 0x24) = 0" (pointer_expression "*(undefined8 *)((long)puVar11 + 0x24)" (* "*") (cast_expression "(undefined8 *)((long)puVar11 + 0x24)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar11 + 0x24)" (( "(") (binary_expression "(long)puVar11 + 0x24" (cast_expression "(long)puVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar11")) (+ "+") (number_literal "0x24")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[6] = 0;" (assignment_expression "puVar11[6] = 0" (subscript_expression "puVar11[6]" (identifier "puVar11") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[7] = 0;" (assignment_expression "puVar11[7] = 0" (subscript_expression "puVar11[7]" (identifier "puVar11") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[8] = 0;" (assignment_expression "puVar11[8] = 0" (subscript_expression "puVar11[8]" (identifier "puVar11") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[9] = 0;" (assignment_expression "puVar11[9] = 0" (subscript_expression "puVar11[9]" (identifier "puVar11") ([ "[") (number_literal "9") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[10] = 0;" (assignment_expression "puVar11[10] = 0" (subscript_expression "puVar11[10]" (identifier "puVar11") ([ "[") (number_literal "10") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[0xb] = 0;" (assignment_expression "puVar11[0xb] = 0" (subscript_expression "puVar11[0xb]" (identifier "puVar11") ([ "[") (number_literal "0xb") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[0xc] = 0;" (assignment_expression "puVar11[0xc] = 0" (subscript_expression "puVar11[0xc]" (identifier "puVar11") ([ "[") (number_literal "0xc") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(puVar11 + 0xd) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 0xd) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 0xd)" (* "*") (cast_expression "(undefined4 *)(puVar11 + 0xd)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xd)" (( "(") (binary_expression "puVar11 + 0xd" (identifier "puVar11") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(puVar11 + 0x13) = 0;" (assignment_expression "*(undefined1 *)(puVar11 + 0x13) = 0" (pointer_expression "*(undefined1 *)(puVar11 + 0x13)" (* "*") (cast_expression "(undefined1 *)(puVar11 + 0x13)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0x13)" (( "(") (binary_expression "puVar11 + 0x13" (identifier "puVar11") (+ "+") (number_literal "0x13")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_004eb7d0(puVar11,param_4 + 0xd0);" (call_expression "FUN_004eb7d0(puVar11,param_4 + 0xd0)" (identifier "FUN_004eb7d0") (argument_list "(puVar11,param_4 + 0xd0)" (( "(") (identifier "puVar11") (, ",") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")"))) (; ";")) (expression_statement "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);" (call_expression "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8)" (identifier "FUN_004a0ee0") (argument_list "(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8)" (( "(") (pointer_expression "*(undefined8 *)(param_4 + 0xd0)" (* "*") (cast_expression "(undefined8 *)(param_4 + 0xd0)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0xd0)" (( "(") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")")))) (, ",") (identifier "puVar11") (, ",") (identifier "lVar8") () ")"))) (; ";")) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" (identifier "lVar10") (= "=") (pointer_expression "*plVar1" (* "*") (identifier "plVar1"))) (; ";")) (} "}"))) (expression_statement "piVar3 = (int *)*param_6;" (assignment_expression "piVar3 = (int *)*param_6" (identifier "piVar3") (= "=") (cast_expression "(int *)*param_6" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_6" (* "*") (identifier "param_6")))) (; ";")) (expression_statement "piVar18 = piVar3;" (assignment_expression "piVar18 = piVar3" (identifier "piVar18") (= "=") (identifier "piVar3")) (; ";")) (if_statement "if (*piVar3 == *(int *)(lVar10 + 0x6c)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" (if "if") (parenthesized_expression "(*piVar3 == *(int *)(lVar10 + 0x6c))" (( "(") (binary_expression "*piVar3 == *(int *)(lVar10 + 0x6c)" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (== "==") (pointer_expression "*(int *)(lVar10 + 0x6c)" (* "*") (cast_expression "(int *)(lVar10 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x6c)" (( "(") (binary_expression "lVar10 + 0x6c" (identifier "lVar10") (+ "+") (number_literal "0x6c")) () ")"))))) () ")")) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);\n    local_90 = *(undefined4 **)(lVar10 + 0x50);\n    uVar15 = *(ulong *)(lVar10 + 0x58);\n    if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }\n  }" ({ "{") (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x68)" (identifier "local_4c") (= "=") (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x68)" (* "*") (cast_expression "(undefined1 (*) [4])(lVar10 + 0x68)" (( "(") (type_descriptor "undefined1 (*) [4]" (type_identifier "undefined1") (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "4") (] "]"))) () ")") (parenthesized_expression "(lVar10 + 0x68)" (( "(") (binary_expression "lVar10 + 0x68" (identifier "lVar10") (+ "+") (number_literal "0x68")) () ")"))))) (; ";")) (expression_statement "local_90 = *(undefined4 **)(lVar10 + 0x50);" (assignment_expression "local_90 = *(undefined4 **)(lVar10 + 0x50)" (identifier "local_90") (= "=") (pointer_expression "*(undefined4 **)(lVar10 + 0x50)" (* "*") (cast_expression "(undefined4 **)(lVar10 + 0x50)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar10 + 0x50)" (( "(") (binary_expression "lVar10 + 0x50" (identifier "lVar10") (+ "+") (number_literal "0x50")) () ")"))))) (; ";")) (expression_statement "uVar15 = *(ulong *)(lVar10 + 0x58);" (assignment_expression "uVar15 = *(ulong *)(lVar10 + 0x58)" (identifier "uVar15") (= "=") (pointer_expression "*(ulong *)(lVar10 + 0x58)" (* "*") (cast_expression "(ulong *)(lVar10 + 0x58)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x58)" (( "(") (binary_expression "lVar10 + 0x58" (identifier "lVar10") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (if_statement "if (*(long *)(piVar3 + -6) != 0) {\n      piVar18 = piVar3 + 1;\n    }" (if "if") (parenthesized_expression "(*(long *)(piVar3 + -6) != 0)" (( "(") (binary_expression "*(long *)(piVar3 + -6) != 0" (pointer_expression "*(long *)(piVar3 + -6)" (* "*") (cast_expression "(long *)(piVar3 + -6)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3 + -6)" (( "(") (binary_expression "piVar3 + -6" (identifier "piVar3") (+ "+") (number_literal "-6")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      piVar18 = piVar3 + 1;\n    }" ({ "{") (expression_statement "piVar18 = piVar3 + 1;" (assignment_expression "piVar18 = piVar3 + 1" (identifier "piVar18") (= "=") (binary_expression "piVar3 + 1" (identifier "piVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" (else "else") (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 100);\n    local_90 = *(undefined4 **)(lVar10 + 0x40);\n    uVar15 = *(ulong *)(lVar10 + 0x48);\n  }" ({ "{") (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 100);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 100)" (identifier "local_4c") (= "=") (pointer_expression "*(undefined1 (*) [4])(lVar10 + 100)" (* "*") (cast_expression "(undefined1 (*) [4])(lVar10 + 100)" (( "(") (type_descriptor "undefined1 (*) [4]" (type_identifier "undefined1") (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "4") (] "]"))) () ")") (parenthesized_expression "(lVar10 + 100)" (( "(") (binary_expression "lVar10 + 100" (identifier "lVar10") (+ "+") (number_literal "100")) () ")"))))) (; ";")) (expression_statement "local_90 = *(undefined4 **)(lVar10 + 0x40);" (assignment_expression "local_90 = *(undefined4 **)(lVar10 + 0x40)" (identifier "local_90") (= "=") (pointer_expression "*(undefined4 **)(lVar10 + 0x40)" (* "*") (cast_expression "(undefined4 **)(lVar10 + 0x40)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar10 + 0x40)" (( "(") (binary_expression "lVar10 + 0x40" (identifier "lVar10") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "uVar15 = *(ulong *)(lVar10 + 0x48);" (assignment_expression "uVar15 = *(ulong *)(lVar10 + 0x48)" (identifier "uVar15") (= "=") (pointer_expression "*(ulong *)(lVar10 + 0x48)" (* "*") (cast_expression "(ulong *)(lVar10 + 0x48)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x48)" (( "(") (binary_expression "lVar10 + 0x48" (identifier "lVar10") (+ "+") (number_literal "0x48")) () ")"))))) (; ";")) (} "}")))) (expression_statement "lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));" (assignment_expression "lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" (identifier "lVar8") (= "=") (call_expression "(**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" (parenthesized_expression "(**(code **)(*plVar7 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar7 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar7 + 0x28)" (* "*") (cast_expression "(code **)(*plVar7 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar7 + 0x28)" (( "(") (binary_expression "*plVar7 + 0x28" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6))" (( "(") (identifier "plVar7") (, ",") (number_literal "0x800") (, ",") (identifier "piVar18") (, ",") (binary_expression "piVar18 + *(long *)(piVar3 + -6)" (identifier "piVar18") (+ "+") (pointer_expression "*(long *)(piVar3 + -6)" (* "*") (cast_expression "(long *)(piVar3 + -6)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3 + -6)" (( "(") (binary_expression "piVar3 + -6" (identifier "piVar3") (+ "+") (number_literal "-6")) () ")"))))) () ")")))) (; ";")) (expression_statement "lVar8 = lVar8 - (long)piVar18 >> 2;" (assignment_expression "lVar8 = lVar8 - (long)piVar18 >> 2" (identifier "lVar8") (= "=") (binary_expression "lVar8 - (long)piVar18 >> 2" (binary_expression "lVar8 - (long)piVar18" (identifier "lVar8") (- "-") (cast_expression "(long)piVar18" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "piVar18"))) (>> ">>") (number_literal "2"))) (; ";")) (if_statement "if (lVar8 != 0) {\n    local_48 = &DAT_0068b618;\n                    \n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    \n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }" (if "if") (parenthesized_expression "(lVar8 != 0)" (( "(") (binary_expression "lVar8 != 0" (identifier "lVar8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    local_48 = &DAT_0068b618;\n                    \n    FUN_0051a0b0(&local_48,lVar8 * 2);\n    iVar6 = *(int *)(lVar10 + 0x60);\n    lVar13 = lVar8 - iVar6;\n    if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }\n    if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }\n    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;\n    local_78 = *(long *)(local_48 + -0x18) + uVar15;\n    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }\n    local_40[0] = &DAT_0068b618;\n                    \n    FUN_0051a0b0(local_40,local_78 * 2);\n    uVar16 = *(ulong *)(param_4 + 0x10);\n    ppuVar14 = (undefined **)local_4c;\n    bVar12 = uVar17 == 0x10 && local_78 < uVar16;\n    do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);\n    if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }\n    uVar15 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }\n    if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }\n    param_3 = param_3 & 0xffffffffffffff00;\n    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }\n    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }\n  }" ({ "{") (expression_statement "local_48 = &DAT_0068b618;" (assignment_expression "local_48 = &DAT_0068b618" (identifier "local_48") (= "=") (pointer_expression "&DAT_0068b618" (& "&") (identifier "DAT_0068b618"))) (; ";")) (expression_statement "FUN_0051a0b0(&local_48,lVar8 * 2);" (call_expression "FUN_0051a0b0(&local_48,lVar8 * 2)" (identifier "FUN_0051a0b0") (argument_list "(&local_48,lVar8 * 2)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (binary_expression "lVar8 * 2" (identifier "lVar8") (* "*") (number_literal "2")) () ")"))) (; ";")) (expression_statement "iVar6 = *(int *)(lVar10 + 0x60);" (assignment_expression "iVar6 = *(int *)(lVar10 + 0x60)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(lVar10 + 0x60)" (* "*") (cast_expression "(int *)(lVar10 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x60)" (( "(") (binary_expression "lVar10 + 0x60" (identifier "lVar10") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (expression_statement "lVar13 = lVar8 - iVar6;" (assignment_expression "lVar13 = lVar8 - iVar6" (identifier "lVar13") (= "=") (binary_expression "lVar8 - iVar6" (identifier "lVar8") (- "-") (identifier "iVar6"))) (; ";")) (if_statement "if (0 < lVar13) {\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }" (if "if") (parenthesized_expression "(0 < lVar13)" (( "(") (binary_expression "0 < lVar13" (number_literal "0") (< "<") (identifier "lVar13")) () ")")) (compound_statement "{\n      if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }\n      if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }\n      iVar6 = *(int *)(lVar10 + 0x60);\n    }" ({ "{") (if_statement "if (iVar6 < 0) {\n        lVar13 = lVar8;\n      }" (if "if") (parenthesized_expression "(iVar6 < 0)" (( "(") (binary_expression "iVar6 < 0" (identifier "iVar6") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        lVar13 = lVar8;\n      }" ({ "{") (expression_statement "lVar13 = lVar8;" (assignment_expression "lVar13 = lVar8" (identifier "lVar13") (= "=") (identifier "lVar8")) (; ";")) (} "}"))) (if_statement "if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }\n      else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" (if "if") (parenthesized_expression "(*(long *)(lVar10 + 0x18) == 0)" (( "(") (binary_expression "*(long *)(lVar10 + 0x18) == 0" (pointer_expression "*(long *)(lVar10 + 0x18)" (* "*") (cast_expression "(long *)(lVar10 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x18)" (( "(") (binary_expression "lVar10 + 0x18" (identifier "lVar10") (+ "+") (number_literal "0x18")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n        FUN_00519bc0(&local_48,piVar18,lVar13);\n      }" ({ "{") (expression_statement "FUN_00519bc0(&local_48,piVar18,lVar13);" (call_expression "FUN_00519bc0(&local_48,piVar18,lVar13)" (identifier "FUN_00519bc0") (argument_list "(&local_48,piVar18,lVar13)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "piVar18") (, ",") (identifier "lVar13") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" (else "else") (compound_statement "{\n        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);\n        uVar4 = *(undefined8 *)(lVar10 + 0x18);\n        uVar5 = *(undefined8 *)(lVar10 + 0x10);\n        uVar2 = *(undefined4 *)(lVar10 + 0x28);\n        if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }\n        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);\n        if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }\n        uVar16 = lVar9 - (long)local_48 >> 2;\n        if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }\n        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);\n      }" ({ "{") (expression_statement "FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);" (call_expression "FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0)" (identifier "FUN_00519980") (argument_list "(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (number_literal "0") (, ",") (pointer_expression "*(undefined8 *)(local_48 + -0x18)" (* "*") (cast_expression "(undefined8 *)(local_48 + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")")))) (, ",") (binary_expression "lVar13 * 2" (identifier "lVar13") (* "*") (number_literal "2")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar4 = *(undefined8 *)(lVar10 + 0x18);" (assignment_expression "uVar4 = *(undefined8 *)(lVar10 + 0x18)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined8 *)(lVar10 + 0x18)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x18)" (( "(") (binary_expression "lVar10 + 0x18" (identifier "lVar10") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(undefined8 *)(lVar10 + 0x10);" (assignment_expression "uVar5 = *(undefined8 *)(lVar10 + 0x10)" (identifier "uVar5") (= "=") (pointer_expression "*(undefined8 *)(lVar10 + 0x10)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x10)" (( "(") (binary_expression "lVar10 + 0x10" (identifier "lVar10") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "uVar2 = *(undefined4 *)(lVar10 + 0x28);" (assignment_expression "uVar2 = *(undefined4 *)(lVar10 + 0x28)" (identifier "uVar2") (= "=") (pointer_expression "*(undefined4 *)(lVar10 + 0x28)" (* "*") (cast_expression "(undefined4 *)(lVar10 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x28)" (( "(") (binary_expression "lVar10 + 0x28" (identifier "lVar10") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (-1 < *(int *)(local_48 + -8)) {\n          FUN_00519690(&local_48);\n        }" (if "if") (parenthesized_expression "(-1 < *(int *)(local_48 + -8))" (( "(") (binary_expression "-1 < *(int *)(local_48 + -8)" (number_literal "-1") (< "<") (pointer_expression "*(int *)(local_48 + -8)" (* "*") (cast_expression "(int *)(local_48 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -8)" (( "(") (binary_expression "local_48 + -8" (identifier "local_48") (+ "+") (number_literal "-8")) () ")"))))) () ")")) (compound_statement "{\n          FUN_00519690(&local_48);\n        }" ({ "{") (expression_statement "FUN_00519690(&local_48);" (call_expression "FUN_00519690(&local_48)" (identifier "FUN_00519690") (argument_list "(&local_48)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);" (assignment_expression "lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" (identifier "lVar9") (= "=") (call_expression "FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" (identifier "FUN_004eca90") (argument_list "(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13)" (( "(") (identifier "local_48") (, ",") (identifier "uVar2") (, ",") (identifier "uVar5") (, ",") (identifier "uVar4") (, ",") (identifier "piVar18") (, ",") (binary_expression "piVar18 + lVar13" (identifier "piVar18") (+ "+") (identifier "lVar13")) () ")")))) (; ";")) (if_statement "if (-1 < *(int *)(local_48 + -8)) {\n                    \n          FUN_00519690(&local_48);\n        }" (if "if") (parenthesized_expression "(-1 < *(int *)(local_48 + -8))" (( "(") (binary_expression "-1 < *(int *)(local_48 + -8)" (number_literal "-1") (< "<") (pointer_expression "*(int *)(local_48 + -8)" (* "*") (cast_expression "(int *)(local_48 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -8)" (( "(") (binary_expression "local_48 + -8" (identifier "local_48") (+ "+") (number_literal "-8")) () ")"))))) () ")")) (compound_statement "{\n                    \n          FUN_00519690(&local_48);\n        }" ({ "{") (expression_statement "FUN_00519690(&local_48);" (call_expression "FUN_00519690(&local_48)" (identifier "FUN_00519690") (argument_list "(&local_48)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar16 = lVar9 - (long)local_48 >> 2;" (assignment_expression "uVar16 = lVar9 - (long)local_48 >> 2" (identifier "uVar16") (= "=") (binary_expression "lVar9 - (long)local_48 >> 2" (binary_expression "lVar9 - (long)local_48" (identifier "lVar9") (- "-") (cast_expression "(long)local_48" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_48"))) (>> ">>") (number_literal "2"))) (; ";")) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar16) {\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }" (if "if") (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar16)" (( "(") (binary_expression "*(ulong *)(local_48 + -0x18) < uVar16" (pointer_expression "*(ulong *)(local_48 + -0x18)" (* "*") (cast_expression "(ulong *)(local_48 + -0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")")))) (< "<") (identifier "uVar16")) () ")")) (compound_statement "{\n                    \n          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);\n        }" ({ "{") (expression_statement "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16);" (call_expression "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16)" (identifier "FUN_004dcce0") (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar16)" (( "(") (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" (" """) (string_content "%s: __pos (which is %zu) > this->size() (which is %zu)") (" """)) (, ",") (string_literal ""basic_string::erase"" (" """) (string_content "basic_string::erase") (" """)) (, ",") (identifier "uVar16") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);" (call_expression "FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0)" (identifier "FUN_00519470") (argument_list "(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "uVar16") (, ",") (binary_expression "*(ulong *)(local_48 + -0x18) - uVar16" (pointer_expression "*(ulong *)(local_48 + -0x18)" (* "*") (cast_expression "(ulong *)(local_48 + -0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")")))) (- "-") (identifier "uVar16")) (, ",") (number_literal "0") () ")"))) (; ";")) (} "}")))) (expression_statement "iVar6 = *(int *)(lVar10 + 0x60);" (assignment_expression "iVar6 = *(int *)(lVar10 + 0x60)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(lVar10 + 0x60)" (* "*") (cast_expression "(int *)(lVar10 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x60)" (( "(") (binary_expression "lVar10 + 0x60" (identifier "lVar10") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (0 < iVar6) {\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n                    \n      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));\n      if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }\n    }" ({ "{") (expression_statement "FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));" (call_expression "FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24))" (identifier "FUN_0051a5d0") (argument_list "(&local_48,*(undefined4 *)(lVar10 + 0x24))" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (pointer_expression "*(undefined4 *)(lVar10 + 0x24)" (* "*") (cast_expression "(undefined4 *)(lVar10 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x24)" (( "(") (binary_expression "lVar10 + 0x24" (identifier "lVar10") (+ "+") (number_literal "0x24")) () ")")))) () ")"))) (; ";")) (if_statement "if (lVar13 < 0) {\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }\n      else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" (if "if") (parenthesized_expression "(lVar13 < 0)" (( "(") (binary_expression "lVar13 < 0" (identifier "lVar13") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));\n        FUN_0051a320(&local_48,piVar18,lVar8);\n      }" ({ "{") (expression_statement "FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));" (call_expression "FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70))" (identifier "FUN_0051a4b0") (argument_list "(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70))" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (unary_expression "-lVar13" (- "-") (identifier "lVar13")) (, ",") (pointer_expression "*(undefined4 *)(lVar10 + 0x70)" (* "*") (cast_expression "(undefined4 *)(lVar10 + 0x70)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x70)" (( "(") (binary_expression "lVar10 + 0x70" (identifier "lVar10") (+ "+") (number_literal "0x70")) () ")")))) () ")"))) (; ";")) (expression_statement "FUN_0051a320(&local_48,piVar18,lVar8);" (call_expression "FUN_0051a320(&local_48,piVar18,lVar8)" (identifier "FUN_0051a320") (argument_list "(&local_48,piVar18,lVar8)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "piVar18") (, ",") (identifier "lVar8") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" (else "else") (compound_statement "{\n        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));\n      }" ({ "{") (expression_statement "FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));" (call_expression "FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60))" (identifier "FUN_0051a320") (argument_list "(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60))" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (binary_expression "piVar18 + lVar13" (identifier "piVar18") (+ "+") (identifier "lVar13")) (, ",") (cast_expression "(long)*(int *)(lVar10 + 0x60)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(lVar10 + 0x60)" (* "*") (cast_expression "(int *)(lVar10 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x60)" (( "(") (binary_expression "lVar10 + 0x60" (identifier "lVar10") (+ "+") (number_literal "0x60")) () ")"))))) () ")"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar17 = *(uint *)(param_4 + 0x18) & 0xb0" (identifier "uVar17") (= "=") (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" (* "*") (cast_expression "(uint *)(param_4 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x18)" (( "(") (binary_expression "param_4 + 0x18" (identifier "param_4") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0xb0"))) (; ";")) (expression_statement "local_78 = *(long *)(local_48 + -0x18) + uVar15;" (assignment_expression "local_78 = *(long *)(local_48 + -0x18) + uVar15" (identifier "local_78") (= "=") (binary_expression "*(long *)(local_48 + -0x18) + uVar15" (pointer_expression "*(long *)(local_48 + -0x18)" (* "*") (cast_expression "(long *)(local_48 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")")))) (+ "+") (identifier "uVar15"))) (; ";")) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }" (if "if") (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" (( "(") (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" (( "(") (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" (* "*") (cast_expression "(uint *)(param_4 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x18)" (( "(") (binary_expression "param_4 + 0x18" (identifier "param_4") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0x200")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      local_78 = local_78 + *(long *)(lVar10 + 0x38);\n    }" ({ "{") (expression_statement "local_78 = local_78 + *(long *)(lVar10 + 0x38);" (assignment_expression "local_78 = local_78 + *(long *)(lVar10 + 0x38)" (identifier "local_78") (= "=") (binary_expression "local_78 + *(long *)(lVar10 + 0x38)" (identifier "local_78") (+ "+") (pointer_expression "*(long *)(lVar10 + 0x38)" (* "*") (cast_expression "(long *)(lVar10 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x38)" (( "(") (binary_expression "lVar10 + 0x38" (identifier "lVar10") (+ "+") (number_literal "0x38")) () ")")))))) (; ";")) (} "}"))) (expression_statement "local_40[0] = &DAT_0068b618;" (assignment_expression "local_40[0] = &DAT_0068b618" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (= "=") (pointer_expression "&DAT_0068b618" (& "&") (identifier "DAT_0068b618"))) (; ";")) (expression_statement "FUN_0051a0b0(local_40,local_78 * 2);" (call_expression "FUN_0051a0b0(local_40,local_78 * 2)" (identifier "FUN_0051a0b0") (argument_list "(local_40,local_78 * 2)" (( "(") (identifier "local_40") (, ",") (binary_expression "local_78 * 2" (identifier "local_78") (* "*") (number_literal "2")) () ")"))) (; ";")) (expression_statement "uVar16 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar16 = *(ulong *)(param_4 + 0x10)" (identifier "uVar16") (= "=") (pointer_expression "*(ulong *)(param_4 + 0x10)" (* "*") (cast_expression "(ulong *)(param_4 + 0x10)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x10)" (( "(") (binary_expression "param_4 + 0x10" (identifier "param_4") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "ppuVar14 = (undefined **)local_4c;" (assignment_expression "ppuVar14 = (undefined **)local_4c" (identifier "ppuVar14") (= "=") (cast_expression "(undefined **)local_4c" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "local_4c"))) (; ";")) (expression_statement "bVar12 = uVar17 == 0x10 && local_78 < uVar16;" (assignment_expression "bVar12 = uVar17 == 0x10 && local_78 < uVar16" (identifier "bVar12") (= "=") (binary_expression "uVar17 == 0x10 && local_78 < uVar16" (binary_expression "uVar17 == 0x10" (identifier "uVar17") (== "==") (number_literal "0x10")) (&& "&&") (binary_expression "local_78 < uVar16" (identifier "local_78") (< "<") (identifier "uVar16")))) (; ";")) (do_statement "do {\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    } while (ppuVar14 != &local_48);" (do "do") (compound_statement "{\n      switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }\n      ppuVar14 = (undefined **)((long)ppuVar14 + 1);\n    }" ({ "{") (switch_statement "switch(*(undefined1 *)ppuVar14) {\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }" (switch "switch") (parenthesized_expression "(*(undefined1 *)ppuVar14)" (( "(") (pointer_expression "*(undefined1 *)ppuVar14" (* "*") (cast_expression "(undefined1 *)ppuVar14" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "ppuVar14"))) () ")")) (compound_statement "{\n      case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;\n      case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;\n      case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;\n      case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;\n      case 4:\n        FUN_0051a190(local_40,&local_48);\n      }" ({ "{") (case_statement "case 0:\n        if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }\n        break;" (case "case") (number_literal "0") (: ":") (if_statement "if (bVar12) {\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\nLAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);\n        }" ({ "{") (labeled_statement "LAB_004ed01b:\n          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);" (statement_identifier "LAB_004ed01b") (: ":") (expression_statement "FUN_0051a4b0(local_40,uVar16 - local_78,param_5);" (call_expression "FUN_0051a4b0(local_40,uVar16 - local_78,param_5)" (identifier "FUN_0051a4b0") (argument_list "(local_40,uVar16 - local_78,param_5)" (( "(") (identifier "local_40") (, ",") (binary_expression "uVar16 - local_78" (identifier "uVar16") (- "-") (identifier "local_78")) (, ",") (identifier "param_5") () ")"))) (; ";"))) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 1:\n        if (bVar12) goto LAB_004ed01b;\n                    \n        FUN_0051a5d0(local_40,param_5);\n        break;" (case "case") (number_literal "1") (: ":") (if_statement "if (bVar12) goto LAB_004ed01b;" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (goto_statement "goto LAB_004ed01b;" (goto "goto") (statement_identifier "LAB_004ed01b") (; ";"))) (expression_statement "FUN_0051a5d0(local_40,param_5);" (call_expression "FUN_0051a5d0(local_40,param_5)" (identifier "FUN_0051a5d0") (argument_list "(local_40,param_5)" (( "(") (identifier "local_40") (, ",") (identifier "param_5") () ")"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 2:\n        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }\n        break;" (case "case") (number_literal "2") (: ":") (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }" (if "if") (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" (( "(") (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" (( "(") (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" (* "*") (cast_expression "(byte *)(param_4 + 0x19)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x19)" (( "(") (binary_expression "param_4 + 0x19" (identifier "param_4") (+ "+") (number_literal "0x19")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));\n        }" ({ "{") (expression_statement "FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));" (call_expression "FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38))" (identifier "FUN_0051a320") (argument_list "(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38))" (( "(") (identifier "local_40") (, ",") (pointer_expression "*(undefined8 *)(lVar10 + 0x30)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x30)" (( "(") (binary_expression "lVar10 + 0x30" (identifier "lVar10") (+ "+") (number_literal "0x30")) () ")")))) (, ",") (pointer_expression "*(undefined8 *)(lVar10 + 0x38)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x38)" (( "(") (binary_expression "lVar10 + 0x38" (identifier "lVar10") (+ "+") (number_literal "0x38")) () ")")))) () ")"))) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 3:\n        if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }\n        break;" (case "case") (number_literal "3") (: ":") (if_statement "if (uVar15 != 0) {\n          FUN_0051a5d0(local_40,*local_90);\n        }" (if "if") (parenthesized_expression "(uVar15 != 0)" (( "(") (binary_expression "uVar15 != 0" (identifier "uVar15") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_0051a5d0(local_40,*local_90);\n        }" ({ "{") (expression_statement "FUN_0051a5d0(local_40,*local_90);" (call_expression "FUN_0051a5d0(local_40,*local_90)" (identifier "FUN_0051a5d0") (argument_list "(local_40,*local_90)" (( "(") (identifier "local_40") (, ",") (pointer_expression "*local_90" (* "*") (identifier "local_90")) () ")"))) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 4:\n        FUN_0051a190(local_40,&local_48);" (case "case") (number_literal "4") (: ":") (expression_statement "FUN_0051a190(local_40,&local_48);" (call_expression "FUN_0051a190(local_40,&local_48)" (identifier "FUN_0051a190") (argument_list "(local_40,&local_48)" (( "(") (identifier "local_40") (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";"))) (} "}"))) (expression_statement "ppuVar14 = (undefined **)((long)ppuVar14 + 1);" (assignment_expression "ppuVar14 = (undefined **)((long)ppuVar14 + 1)" (identifier "ppuVar14") (= "=") (cast_expression "(undefined **)((long)ppuVar14 + 1)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)ppuVar14 + 1)" (( "(") (binary_expression "(long)ppuVar14 + 1" (cast_expression "(long)ppuVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "ppuVar14")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(ppuVar14 != &local_48)" (( "(") (binary_expression "ppuVar14 != &local_48" (identifier "ppuVar14") (!= "!=") (pointer_expression "&local_48" (& "&") (identifier "local_48"))) () ")")) (; ";")) (if_statement "if (1 < uVar15) {\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }" (if "if") (parenthesized_expression "(1 < uVar15)" (( "(") (binary_expression "1 < uVar15" (number_literal "1") (< "<") (identifier "uVar15")) () ")")) (compound_statement "{\n      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);\n    }" ({ "{") (expression_statement "FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);" (call_expression "FUN_0051a320(local_40,local_90 + 1,uVar15 - 1)" (identifier "FUN_0051a320") (argument_list "(local_40,local_90 + 1,uVar15 - 1)" (( "(") (identifier "local_40") (, ",") (binary_expression "local_90 + 1" (identifier "local_90") (+ "+") (number_literal "1")) (, ",") (binary_expression "uVar15 - 1" (identifier "uVar15") (- "-") (number_literal "1")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar15 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar15 = *(ulong *)(local_40[0] + -0x18)" (identifier "uVar15") (= "=") (pointer_expression "*(ulong *)(local_40[0] + -0x18)" (* "*") (cast_expression "(ulong *)(local_40[0] + -0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (if_statement "if (uVar15 < uVar16) {\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }" (if "if") (parenthesized_expression "(uVar15 < uVar16)" (( "(") (binary_expression "uVar15 < uVar16" (identifier "uVar15") (< "<") (identifier "uVar16")) () ")")) (compound_statement "{\n      if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n    }" ({ "{") (if_statement "if (uVar17 == 0x20) {\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }\n      else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" (if "if") (parenthesized_expression "(uVar17 == 0x20)" (( "(") (binary_expression "uVar17 == 0x20" (identifier "uVar17") (== "==") (number_literal "0x20")) () ")")) (compound_statement "{\n                    \n        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" ({ "{") (expression_statement "FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);" (call_expression "FUN_0051a4b0(local_40,uVar16 - uVar15,param_5)" (identifier "FUN_0051a4b0") (argument_list "(local_40,uVar16 - uVar15,param_5)" (( "(") (identifier "local_40") (, ",") (binary_expression "uVar16 - uVar15" (identifier "uVar16") (- "-") (identifier "uVar15")) (, ",") (identifier "param_5") () ")"))) (; ";")) (expression_statement "uVar15 = uVar16;" (assignment_expression "uVar15 = uVar16" (identifier "uVar15") (= "=") (identifier "uVar16")) (; ";")) (} "}")) (else_clause "else {\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" (else "else") (compound_statement "{\n        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);\n        uVar15 = uVar16;\n      }" ({ "{") (expression_statement "FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);" (call_expression "FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5)" (identifier "FUN_00519980") (argument_list "(local_40,0,0,uVar16 - uVar15,param_5)" (( "(") (identifier "local_40") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (binary_expression "uVar16 - uVar15" (identifier "uVar16") (- "-") (identifier "uVar15")) (, ",") (identifier "param_5") () ")"))) (; ";")) (expression_statement "uVar15 = uVar16;" (assignment_expression "uVar15 = uVar16" (identifier "uVar15") (= "=") (identifier "uVar16")) (; ";")) (} "}")))) (} "}"))) (if_statement "if (local_9d == '\0') {\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }" (if "if") (parenthesized_expression "(local_9d == '\0')" (( "(") (binary_expression "local_9d == '\0'" (identifier "local_9d") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);\n      local_9d = (int)uVar15 != lVar10;\n    }" ({ "{") (expression_statement "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);" (assignment_expression "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15)" (identifier "lVar10") (= "=") (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x60)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x60)" (* "*") (cast_expression "(code **)(*param_2 + 0x60)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x60)" (( "(") (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x60")) () ")"))))) () ")")) (argument_list "(param_2,local_40[0],(long)(int)uVar15)" (( "(") (identifier "param_2") (, ",") (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (, ",") (cast_expression "(long)(int)uVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15"))) () ")")))) (; ";")) (expression_statement "local_9d = (int)uVar15 != lVar10;" (assignment_expression "local_9d = (int)uVar15 != lVar10" (identifier "local_9d") (= "=") (binary_expression "(int)uVar15 != lVar10" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (!= "!=") (identifier "lVar10"))) (; ";")) (} "}"))) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" (identifier "param_3") (= "=") (binary_expression "param_3 & 0xffffffffffffff00" (identifier "param_3") (& "&") (number_literal "0xffffffffffffff00"))) (; ";")) (if_statement "if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }" (if "if") (parenthesized_expression "(local_40[0] + -0x18 != PTR_DAT_0067bcd8)" (( "(") (binary_expression "local_40[0] + -0x18 != PTR_DAT_0067bcd8" (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) (!= "!=") (identifier "PTR_DAT_0067bcd8")) () ")")) (compound_statement "{\n      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);\n    }" ({ "{") (expression_statement "FUN_004e8ab0(local_40[0] + -0x18,&local_4d);" (call_expression "FUN_004e8ab0(local_40[0] + -0x18,&local_4d)" (identifier "FUN_004e8ab0") (argument_list "(local_40[0] + -0x18,&local_4d)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) (, ",") (pointer_expression "&local_4d" (& "&") (identifier "local_4d")) () ")"))) (; ";")) (} "}"))) (if_statement "if (local_48 + -0x18 != PTR_DAT_0067bcd8) {\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }" (if "if") (parenthesized_expression "(local_48 + -0x18 != PTR_DAT_0067bcd8)" (( "(") (binary_expression "local_48 + -0x18 != PTR_DAT_0067bcd8" (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) (!= "!=") (identifier "PTR_DAT_0067bcd8")) () ")")) (compound_statement "{\n      FUN_004e8ab0(local_48 + -0x18,&local_4d);\n    }" ({ "{") (expression_statement "FUN_004e8ab0(local_48 + -0x18,&local_4d);" (call_expression "FUN_004e8ab0(local_48 + -0x18,&local_4d)" (identifier "FUN_004e8ab0") (argument_list "(local_48 + -0x18,&local_4d)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) (, ",") (pointer_expression "&local_4d" (& "&") (identifier "local_4d")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "auVar19._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar19._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar19._9_7_" (identifier "auVar19") (. ".") (field_identifier "_9_7_")) (= "=") (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" (( "(") (identifier "int7") () ")")) (argument_list "(param_3 >> 8)" (( "(") (binary_expression "param_3 >> 8" (identifier "param_3") (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "auVar19[8] = local_9d;" (assignment_expression "auVar19[8] = local_9d" (subscript_expression "auVar19[8]" (identifier "auVar19") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "local_9d")) (; ";")) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_4 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x10)" (( "(") (binary_expression "param_4 + 0x10" (identifier "param_4") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "auVar19._0_8_ = param_2;" (assignment_expression "auVar19._0_8_ = param_2" (field_expression "auVar19._0_8_" (identifier "auVar19") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "param_2")) (; ";")) (return_statement "return auVar19;" (return "return") (identifier "auVar19") (; ";")) (ERROR "}" (} "}"))

/* std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> > std::money_put<wchar_t,
   std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >
   >::_M_insert<true>(std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, std::ios_base&,
   wchar_t, std::wstring const&) const */

type_4  [16]
std::money_put<var_2,var_10::ostreambuf_iterator<var_2,var_10::var_1<var_2>>>::var_3<true>
          (var_6 param_1,var_4 *var_5,type_2 var_41,var_4 var_11,var_2 param_5,
          var_6 *var_7)

{
  long *plVar1;
  var_2 wVar2;
  char *pcVar3;
  int var_24;
  type_1 *pcVar5;
  type_2 var_13;
  long var_21;
  var_2 *var_19;
  long var_14;
  var_8<var_2,true> *var_16;
  bool bVar10;
  type_2 var_28;
  var_2 **var_38;
  type_2 var_31;
  type_3 var_37;
  type_2 var_22;
  var_2 *var_20;
  type_4 auVar17 [16];
  char var_40;
  var_2 *var_39;
  type_2 var_36;
  type_4 local_4c [4];
  var_2 *var_27;
  type_5 *local_40 [2];
  
  var_40 = (char)var_41;
  pcVar5 = var_9<var_10::type_1<var_2>>((type_6 *)(var_11 + 0xd0));
  var_13 = type_6::id::var_12((type_7 *)&moneypunct<var_2,true>::type_7);
  plVar1 = (long *)(*(long *)(*(long *)(var_11 + 0xd0) + 0x18) + var_13 * 8);
  var_14 = *plVar1;
  if (var_14 == 0) {
                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */
    var_16 = (var_8<var_2,true> *)var_15(0xa0);
    *(type_8 *)(var_16 + 8) = 0;
    *(var_6 *)(var_16 + 0x10) = 0;
    *(var_6 *)(var_16 + 0x18) = 0;
    var_16[0x20] = (var_8<var_2,true>)0x0;
    *(type_5 ***)var_16 = &PTR____moneypunct_cache_00679350;
    *(var_6 *)(var_16 + 0x24) = 0;
    *(var_6 *)(var_16 + 0x30) = 0;
    *(var_6 *)(var_16 + 0x38) = 0;
    *(var_6 *)(var_16 + 0x40) = 0;
    *(var_6 *)(var_16 + 0x48) = 0;
    *(var_6 *)(var_16 + 0x50) = 0;
    *(var_6 *)(var_16 + 0x58) = 0;
    *(var_6 *)(var_16 + 0x60) = 0;
    *(type_8 *)(var_16 + 0x68) = 0;
    var_16[0x98] = (var_8<var_2,true>)0x0;
                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */
    var_8<var_2,true>::var_17(var_16,(type_6 *)(var_11 + 0xd0));
    locale::_Impl::var_18(*(type_9 **)(var_11 + 0xd0),(type_10 *)var_16,var_13);
    var_14 = *plVar1;
  }
  var_19 = (var_2 *)*var_7;
  var_20 = var_19;
  if (*var_19 == *(var_2 *)(var_14 + 0x6c)) {
    local_4c = *(type_4 (*) [4])(var_14 + 0x68);
    var_39 = *(var_2 **)(var_14 + 0x50);
    var_13 = *(type_2 *)(var_14 + 0x58);
    if (*(long *)(var_19 + -6) != 0) {
      var_20 = var_19 + 1;
    }
  }
  else {
    local_4c = *(type_4 (*) [4])(var_14 + 100);
    var_39 = *(var_2 **)(var_14 + 0x40);
    var_13 = *(type_2 *)(var_14 + 0x48);
  }
  var_21 = (**(type_11 **)(*(long *)pcVar5 + 0x28))
                    (pcVar5,0x800,var_20,var_20 + *(long *)(var_19 + -6));
  var_22 = var_21 - (long)var_20 >> 2;
  if (var_22 != 0) {
    var_27 = (var_2 *)&DAT_0068b618;
                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */
    std::wstring::var_23((type_12 *)&var_27,var_22 * 2);
    var_24 = *(int *)(var_14 + 0x60);
    var_28 = var_22 - (long)var_24;
    if (0 < (long)var_28) {
      if (var_24 < 0) {
        var_28 = var_22;
      }
      if (*(long *)(var_14 + 0x18) == 0) {
                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */
        std::wstring::var_25((type_12 *)&var_27,var_20,var_28);
      }
      else {
        std::wstring::var_26
                  ((type_12 *)&var_27,0,*(type_2 *)(var_27 + -6),var_28 * 2,L'\0');
        var_31 = *(type_2 *)(var_14 + 0x18);
        pcVar3 = *(char **)(var_14 + 0x10);
        wVar2 = *(var_2 *)(var_14 + 0x28);
        if (L'\xffffffff' < var_27[-2]) {
          std::wstring::var_29((type_12 *)&var_27);
        }
        var_19 = var_30<var_2>(var_27,wVar2,pcVar3,var_31,var_20,var_20 + var_28);
        if (L'\xffffffff' < var_27[-2]) {
                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */
          std::wstring::var_29((type_12 *)&var_27);
        }
        var_31 = (long)var_19 - (long)var_27 >> 2;
        if (*(type_2 *)(var_27 + -6) < var_31) {
                    /* WARNING: Subroutine does not return */
          var_32
                    ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",
                     var_31);
        }
        std::wstring::var_33((type_12 *)&var_27,var_31,*(type_2 *)(var_27 + -6) - var_31,0);
      }
      var_24 = *(int *)(var_14 + 0x60);
    }
    if (0 < var_24) {
                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */
      std::wstring::var_34((type_12 *)&var_27,*(var_2 *)(var_14 + 0x24));
      if ((long)var_28 < 0) {
        std::wstring::var_35((type_12 *)&var_27,-var_28,*(var_2 *)(var_14 + 0x70));
        std::wstring::var_35((type_12 *)&var_27,var_20,var_22);
      }
      else {
        std::wstring::var_35((type_12 *)&var_27,var_20 + var_28,(long)*(int *)(var_14 + 0x60));
      }
    }
    var_37 = *(type_3 *)(var_11 + 0x18) & 0xb0;
    var_36 = *(long *)(var_27 + -6) + var_13;
    if ((*(type_3 *)(var_11 + 0x18) & 0x200) != 0) {
      var_36 = var_36 + *(long *)(var_14 + 0x38);
    }
    local_40[0] = &DAT_0068b618;
                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */
    std::wstring::var_23((type_12 *)local_40,var_36 * 2);
    var_22 = *(type_2 *)(var_11 + 0x10);
    var_38 = (var_2 **)local_4c;
    bVar10 = var_37 == 0x10 && var_36 < var_22;
    do {
      switch(*(type_4 *)var_38) {
      case 0:
        if (bVar10) {
LAB_004ed01b:
          std::wstring::var_35((type_12 *)local_40,var_22 - var_36,param_5);
        }
        break;
      case 1:
        if (bVar10) goto LAB_004ed01b;
                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */
        std::wstring::var_34((type_12 *)local_40,param_5);
        break;
      case 2:
        if ((*(type_13 *)(var_11 + 0x19) & 2) != 0) {
          std::wstring::var_35
                    ((type_12 *)local_40,*(var_2 **)(var_14 + 0x30),*(type_2 *)(var_14 + 0x38));
        }
        break;
      case 3:
        if (var_13 != 0) {
          std::wstring::var_34((type_12 *)local_40,*var_39);
        }
        break;
      case 4:
        std::wstring::var_35((type_12 *)local_40,(type_12 *)&var_27);
      }
      var_38 = (var_2 **)((long)var_38 + 1);
    } while (var_38 != &var_27);
    if (1 < var_13) {
      std::wstring::var_35((type_12 *)local_40,var_39 + 1,var_13 - 1);
    }
    var_13 = *(type_2 *)(local_40[0] + -0x18);
    if (var_13 < var_22) {
      if (var_37 == 0x20) {
                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */
        std::wstring::var_35((type_12 *)local_40,var_22 - var_13,param_5);
        var_13 = var_22;
      }
      else {
        std::wstring::var_26((type_12 *)local_40,0,0,var_22 - var_13,param_5);
        var_13 = var_22;
      }
    }
    if (var_40 == '\0') {
      var_14 = (**(type_11 **)(*var_5 + 0x60))(var_5,local_40[0],(long)(int)var_13);
      var_40 = (int)var_13 != var_14;
    }
    var_41 = var_41 & 0xffffffffffffff00;
    if ((type_14 *)(local_40[0] + -0x18) != (type_14 *)PTR__S_empty_rep_storage_0067bcd8) {
      std::wstring::_Rep::var_42((type_14 *)(local_40[0] + -0x18));
    }
    if ((type_14 *)(var_27 + -6) != (type_14 *)PTR__S_empty_rep_storage_0067bcd8) {
      std::wstring::_Rep::var_42((type_14 *)(var_27 + -6));
    }
  }
  auVar17._9_7_ = (int7)(var_41 >> 8);
  auVar17[8] = var_40;
  *(var_6 *)(var_11 + 0x10) = 0;
  auVar17._0_8_ = var_5;
  return auVar17;
}


(translation_unit (expression_statement (subscript_expression argument: (identifier) index: (number_literal)) (MISSING ";")) (declaration type: (macro_type_specifier name: (identifier) type: (type_descriptor type: (type_identifier)) (MISSING ")")) declarator: (identifier) (ERROR (identifier)) declarator: (pointer_declarator declarator: (identifier)) (ERROR (identifier)) declarator: (identifier) (ERROR (identifier)) declarator: (identifier) declarator: (identifier) (ERROR (identifier)) (ERROR (identifier) (pointer_declarator declarator: (identifier))) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (array_declarator declarator: (identifier) size: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (number_literal) (identifier) (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)) (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (unary_expression argument: (identifier)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (identifier)) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (identifier))))) (do_statement body: (compound_statement (switch_statement condition: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) body: (compound_statement (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)) (identifier))))))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (identifier)) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier))))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (binary_expression left: (identifier) right: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) (pointer_expression argument: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier))))))))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (return_statement (identifier)) (ERROR))

undefined1  [16]
MASKED(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,
            undefined8 *param_6)

{
  long *plVar1;
  undefined4 uVar2;
  int *piVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  bool bVar12;
  long lVar13;
  undefined **ppuVar14;
  ulong uVar15;
  ulong uVar16;
  uint uVar17;
  int *piVar18;
  undefined1 auVar19 [16];
  char local_9d;
  undefined4 *local_90;
  ulong local_78;
  undefined1 local_4d;
  undefined1 local_4c [4];
  undefined *local_48;
  undefined *local_40 [2];
  
  local_9d = (char)param_3;
  plVar7 = (long *)FUN_004eacf0(param_4 + 0xd0);
  lVar8 = FUN_004a0a70(&DAT_0068b4e8);
  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar8 * 8);
  lVar10 = *plVar1;
  if (lVar10 == 0) {
                    /* try { // try from 004ed1cd to 004ed1d1 has its CatchHandler @ 004ed381 */
    puVar11 = (undefined8 *)FUN_0049cb60(0xa0);
    *(undefined4 *)(puVar11 + 1) = 0;
    puVar11[2] = 0;
    puVar11[3] = 0;
    *(undefined1 *)(puVar11 + 4) = 0;
    *puVar11 = &PTR_FUN_00679350;
    *(undefined8 *)((long)puVar11 + 0x24) = 0;
    puVar11[6] = 0;
    puVar11[7] = 0;
    puVar11[8] = 0;
    puVar11[9] = 0;
    puVar11[10] = 0;
    puVar11[0xb] = 0;
    puVar11[0xc] = 0;
    *(undefined4 *)(puVar11 + 0xd) = 0;
    *(undefined1 *)(puVar11 + 0x13) = 0;
                    /* try { // try from 004ed255 to 004ed259 has its CatchHandler @ 004ed37f */
    FUN_004eb7d0(puVar11,param_4 + 0xd0);
    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar8);
    lVar10 = *plVar1;
  }
  piVar3 = (int *)*param_6;
  piVar18 = piVar3;
  if (*piVar3 == *(int *)(lVar10 + 0x6c)) {
    local_4c = *(undefined1 (*) [4])(lVar10 + 0x68);
    local_90 = *(undefined4 **)(lVar10 + 0x50);
    uVar15 = *(ulong *)(lVar10 + 0x58);
    if (*(long *)(piVar3 + -6) != 0) {
      piVar18 = piVar3 + 1;
    }
  }
  else {
    local_4c = *(undefined1 (*) [4])(lVar10 + 100);
    local_90 = *(undefined4 **)(lVar10 + 0x40);
    uVar15 = *(ulong *)(lVar10 + 0x48);
  }
  lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,0x800,piVar18,piVar18 + *(long *)(piVar3 + -6));
  lVar8 = lVar8 - (long)piVar18 >> 2;
  if (lVar8 != 0) {
    local_48 = &DAT_0068b618;
                    /* try { // try from 004ece61 to 004ecf2c has its CatchHandler @ 004ed337 */
    FUN_0051a0b0(&local_48,lVar8 * 2);
    iVar6 = *(int *)(lVar10 + 0x60);
    lVar13 = lVar8 - iVar6;
    if (0 < lVar13) {
      if (iVar6 < 0) {
        lVar13 = lVar8;
      }
      if (*(long *)(lVar10 + 0x18) == 0) {
                    /* try { // try from 004ed283 to 004ed2b3 has its CatchHandler @ 004ed337 */
        FUN_00519bc0(&local_48,piVar18,lVar13);
      }
      else {
        FUN_00519980(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar13 * 2,0);
        uVar4 = *(undefined8 *)(lVar10 + 0x18);
        uVar5 = *(undefined8 *)(lVar10 + 0x10);
        uVar2 = *(undefined4 *)(lVar10 + 0x28);
        if (-1 < *(int *)(local_48 + -8)) {
          FUN_00519690(&local_48);
        }
        lVar9 = FUN_004eca90(local_48,uVar2,uVar5,uVar4,piVar18,piVar18 + lVar13);
        if (-1 < *(int *)(local_48 + -8)) {
                    /* try { // try from 004ed2e5 to 004ed336 has its CatchHandler @ 004ed337 */
          FUN_00519690(&local_48);
        }
        uVar16 = lVar9 - (long)local_48 >> 2;
        if (*(ulong *)(local_48 + -0x18) < uVar16) {
                    /* WARNING: Subroutine does not return */
          FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",
                       "basic_string::erase",uVar16);
        }
        FUN_00519470(&local_48,uVar16,*(ulong *)(local_48 + -0x18) - uVar16,0);
      }
      iVar6 = *(int *)(lVar10 + 0x60);
    }
    if (0 < iVar6) {
                    /* try { // try from 004ed188 to 004ed1a8 has its CatchHandler @ 004ed337 */
      FUN_0051a5d0(&local_48,*(undefined4 *)(lVar10 + 0x24));
      if (lVar13 < 0) {
        FUN_0051a4b0(&local_48,-lVar13,*(undefined4 *)(lVar10 + 0x70));
        FUN_0051a320(&local_48,piVar18,lVar8);
      }
      else {
        FUN_0051a320(&local_48,piVar18 + lVar13,(long)*(int *)(lVar10 + 0x60));
      }
    }
    uVar17 = *(uint *)(param_4 + 0x18) & 0xb0;
    local_78 = *(long *)(local_48 + -0x18) + uVar15;
    if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {
      local_78 = local_78 + *(long *)(lVar10 + 0x38);
    }
    local_40[0] = &DAT_0068b618;
                    /* try { // try from 004ecf88 to 004ed176 has its CatchHandler @ 004ed33c */
    FUN_0051a0b0(local_40,local_78 * 2);
    uVar16 = *(ulong *)(param_4 + 0x10);
    ppuVar14 = (undefined **)local_4c;
    bVar12 = uVar17 == 0x10 && local_78 < uVar16;
    do {
      switch(*(undefined1 *)ppuVar14) {
      case 0:
        if (bVar12) {
LAB_004ed01b:
          FUN_0051a4b0(local_40,uVar16 - local_78,param_5);
        }
        break;
      case 1:
        if (bVar12) goto LAB_004ed01b;
                    /* try { // try from 004ed1b9 to 004ed1bd has its CatchHandler @ 004ed33c */
        FUN_0051a5d0(local_40,param_5);
        break;
      case 2:
        if ((*(byte *)(param_4 + 0x19) & 2) != 0) {
          FUN_0051a320(local_40,*(undefined8 *)(lVar10 + 0x30),*(undefined8 *)(lVar10 + 0x38));
        }
        break;
      case 3:
        if (uVar15 != 0) {
          FUN_0051a5d0(local_40,*local_90);
        }
        break;
      case 4:
        FUN_0051a190(local_40,&local_48);
      }
      ppuVar14 = (undefined **)((long)ppuVar14 + 1);
    } while (ppuVar14 != &local_48);
    if (1 < uVar15) {
      FUN_0051a320(local_40,local_90 + 1,uVar15 - 1);
    }
    uVar15 = *(ulong *)(local_40[0] + -0x18);
    if (uVar15 < uVar16) {
      if (uVar17 == 0x20) {
                    /* try { // try from 004ed2cc to 004ed2d0 has its CatchHandler @ 004ed33c */
        FUN_0051a4b0(local_40,uVar16 - uVar15,param_5);
        uVar15 = uVar16;
      }
      else {
        FUN_00519980(local_40,0,0,uVar16 - uVar15,param_5);
        uVar15 = uVar16;
      }
    }
    if (local_9d == '\0') {
      lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar15);
      local_9d = (int)uVar15 != lVar10;
    }
    param_3 = param_3 & 0xffffffffffffff00;
    if (local_40[0] + -0x18 != PTR_DAT_0067bcd8) {
      FUN_004e8ab0(local_40[0] + -0x18,&local_4d);
    }
    if (local_48 + -0x18 != PTR_DAT_0067bcd8) {
      FUN_004e8ab0(local_48 + -0x18,&local_4d);
    }
  }
  auVar19._9_7_ = (int7)(param_3 >> 8);
  auVar19[8] = local_9d;
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar19._0_8_ = param_2;
  return auVar19;
}

