
char * two_way_long_needle(uchar *haystack,size_t haystack_len,uchar *needle,size_t needle_len)

{
  size_t sVar1;
  size_t sVar2;
  byte bVar3;
  ulong uVar4;
  int iVar5;
  ulong __n;
  size_t *psVar6;
  byte *pbVar7;
  ulong uVar8;
  void *pvVar9;
  ulong uVar10;
  long lVar11;
  uchar *puVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  ulong uVar16;
  long in_FS_OFFSET;
  size_t period;
  size_t shift_table [256];
  size_t local_48;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (needle_len < 3) {
    period = 1;
    __n = needle_len - 1;
  }
  else {
    __n = critical_factorization(needle,needle_len,&period);
  }
  sVar1 = period;
  psVar6 = shift_table;
  do {
    *psVar6 = needle_len;
    psVar6[1] = needle_len;
    psVar6 = psVar6 + 2;
  } while (&local_48 != psVar6);
  if (needle_len == 0) {
    uVar16 = 0xffffffffffffffff;
    iVar5 = memcmp(needle,needle + period,__n);
    if (iVar5 == 0) {
LAB_00124904:
      puVar12 = (uchar *)0x0;
LAB_00124906:
      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
        __stack_chk_fail();
      }
      return (char *)puVar12;
    }
  }
  else {
    uVar16 = needle_len - 1;
    pbVar7 = needle;
    do {
      bVar3 = *pbVar7;
      lVar14 = uVar16 - (long)pbVar7;
      pbVar7 = pbVar7 + 1;
      shift_table[bVar3] = (size_t)(needle + lVar14);
    } while (needle + needle_len != pbVar7);
    iVar5 = memcmp(needle,needle + period,__n);
    if (iVar5 == 0) {
      uVar8 = __n - 1;
      lVar14 = 0;
      uVar10 = 0;
LAB_00124981:
      do {
        sVar2 = lVar14 + needle_len;
        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);
        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;
        uVar13 = shift_table[haystack[sVar2 - 1]];
        haystack_len = sVar2;
        if (uVar13 == 0) {
          uVar13 = __n;
          if (__n <= uVar10) {
            uVar13 = uVar10;
          }
          if (uVar16 <= uVar13) {
LAB_00124a14:
            uVar13 = __n;
            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {
              do {
                uVar13 = uVar4;
                if (uVar10 == uVar13) break;
                uVar4 = uVar13 - 1;
              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);
            }
            if (uVar13 < uVar10 + 1) {
              puVar12 = haystack + lVar14;
              goto LAB_00124906;
            }
            lVar14 = lVar14 + sVar1;
            uVar10 = needle_len - sVar1;
            goto LAB_00124981;
          }
          if (needle[uVar13] == haystack[uVar13 + lVar14]) {
            do {
              uVar13 = uVar13 + 1;
              if (uVar13 == uVar16) goto LAB_00124a14;
            } while (needle[uVar13] == haystack[uVar13 + lVar14]);
          }
          lVar14 = lVar14 + (1 - __n);
        }
        else if ((uVar13 < sVar1) && (uVar10 != 0)) {
          uVar13 = needle_len - sVar1;
        }
        lVar14 = lVar14 + uVar13;
        uVar10 = 0;
      } while( true );
    }
  }
  uVar8 = needle_len - __n;
  if (needle_len - __n < __n) {
    uVar8 = __n;
  }
  lVar15 = 0;
  lVar14 = __n - 1;
LAB_00124826:
  do {
    sVar1 = lVar15 + needle_len;
    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);
    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;
    uVar10 = shift_table[haystack[sVar1 - 1]];
    haystack_len = sVar1;
    if (uVar10 == 0) {
      puVar12 = haystack + lVar15;
      if (uVar16 <= __n) {
LAB_001248a3:
        if (lVar14 == -1) goto LAB_00124906;
        lVar11 = lVar14;
        if (puVar12[lVar14] == needle[lVar14]) {
          do {
            lVar11 = lVar11 + -1;
            if (lVar11 == -1) goto LAB_00124906;
          } while (needle[lVar11] == puVar12[lVar11]);
        }
        lVar15 = lVar15 + uVar8 + 1;
        goto LAB_00124826;
      }
      uVar10 = __n;
      if (puVar12[__n] == needle[__n]) {
        do {
          uVar10 = uVar10 + 1;
          if (uVar16 <= uVar10) goto LAB_001248a3;
        } while (needle[uVar10] == puVar12[uVar10]);
      }
      lVar15 = lVar15 + (1 - __n);
    }
    lVar15 = lVar15 + uVar10;
  } while( true );
}



long FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)

{
  long lVar1;
  byte bVar2;
  ulong uVar3;
  int iVar4;
  ulong __n;
  ulong *puVar5;
  byte *pbVar6;
  ulong uVar7;
  void *pvVar8;
  ulong uVar9;
  long lVar10;
  ulong uVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  ulong uVar15;
  long in_FS_OFFSET;
  ulong local_850;
  ulong local_848 [257];
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_4 < 3) {
    local_850 = 1;
    __n = param_4 - 1;
  }
  else {
    __n = FUN_001245c0(param_3,param_4,&local_850);
  }
  uVar7 = local_850;
  puVar5 = local_848;
  do {
    *puVar5 = param_4;
    puVar5[1] = param_4;
    puVar5 = puVar5 + 2;
  } while (local_848 + 0x100 != puVar5);
  if (param_4 == 0) {
    uVar15 = 0xffffffffffffffff;
    iVar4 = memcmp(param_3,param_3 + local_850,__n);
    if (iVar4 == 0) {
LAB_00124904:
      lVar12 = 0;
LAB_00124906:
      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
        __stack_chk_fail();
      }
      return lVar12;
    }
  }
  else {
    uVar15 = param_4 - 1;
    pbVar6 = param_3;
    do {
      bVar2 = *pbVar6;
      lVar12 = uVar15 - (long)pbVar6;
      pbVar6 = pbVar6 + 1;
      local_848[bVar2] = (ulong)(param_3 + lVar12);
    } while (param_3 + param_4 != pbVar6);
    iVar4 = memcmp(param_3,param_3 + local_850,__n);
    if (iVar4 == 0) {
      uVar9 = __n - 1;
      lVar12 = 0;
      uVar14 = 0;
LAB_00124981:
      do {
        lVar1 = lVar12 + param_4;
        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);
        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;
        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];
        param_2 = lVar1;
        if (uVar11 == 0) {
          uVar11 = __n;
          if (__n <= uVar14) {
            uVar11 = uVar14;
          }
          if (uVar15 <= uVar11) {
LAB_00124a14:
            uVar11 = __n;
            if ((uVar14 < __n) &&
               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {
              do {
                uVar11 = uVar3;
                if (uVar14 == uVar11) break;
                uVar3 = uVar11 - 1;
              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));
            }
            if (uVar11 < uVar14 + 1) {
              lVar12 = param_1 + lVar12;
              goto LAB_00124906;
            }
            lVar12 = lVar12 + uVar7;
            uVar14 = param_4 - uVar7;
            goto LAB_00124981;
          }
          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {
            do {
              uVar11 = uVar11 + 1;
              if (uVar11 == uVar15) goto LAB_00124a14;
            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));
          }
          lVar12 = lVar12 + (1 - __n);
        }
        else if ((uVar11 < uVar7) && (uVar14 != 0)) {
          uVar11 = param_4 - uVar7;
        }
        lVar12 = lVar12 + uVar11;
        uVar14 = 0;
      } while( true );
    }
  }
  uVar7 = param_4 - __n;
  if (param_4 - __n < __n) {
    uVar7 = __n;
  }
  lVar13 = 0;
  lVar1 = __n - 1;
LAB_00124826:
  do {
    lVar12 = lVar13 + param_4;
    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);
    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;
    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];
    param_2 = lVar12;
    if (uVar9 == 0) {
      lVar12 = param_1 + lVar13;
      if (uVar15 <= __n) {
LAB_001248a3:
        if (lVar1 == -1) goto LAB_00124906;
        lVar10 = lVar1;
        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {
          do {
            lVar10 = lVar10 + -1;
            if (lVar10 == -1) goto LAB_00124906;
          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));
        }
        lVar13 = lVar13 + uVar7 + 1;
        goto LAB_00124826;
      }
      uVar9 = __n;
      if (*(byte *)(lVar12 + __n) == param_3[__n]) {
        do {
          uVar9 = uVar9 + 1;
          if (uVar15 <= uVar9) goto LAB_001248a3;
        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));
      }
      lVar13 = lVar13 + (1 - __n);
    }
    lVar13 = lVar13 + uVar9;
  } while( true );
}


PUSH R15
PUSH R14
MOV R14,RDI
PUSH R13
MOV R13,RCX
PUSH R12
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,RSI
SUB RSP,0x868
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x858],RAX
XOR EAX,EAX
CMP RCX,0x2
JBE 0x00124a7a
LEA RDX,[RSP + 0x48]
MOV RSI,RCX
MOV RDI,RBP
CALL 0x001245c0
MOV R12,RAX
MOV RAX,qword ptr [RSP + 0x48]
MOV qword ptr [RSP + 0x20],RAX
MOV qword ptr [RSP + 0x8],R13
MOVQ XMM0,qword ptr [RSP + 0x8]
LEA RAX,[RSP + 0x50]
LEA RDX,[RSP + 0x850]
PUNPCKLQDQ XMM0,XMM0
NOP dword ptr [RAX + RAX*0x1]
MOVAPS xmmword ptr [RAX],XMM0
ADD RAX,0x10
CMP RDX,RAX
JNZ 0x00124788
MOV RAX,qword ptr [RSP + 0x20]
LEA RSI,[RBP + RAX*0x1]
TEST R13,R13
JZ 0x001248ea
LEA R15,[R13 + -0x1]
LEA R10,[R13 + RBP*0x1]
MOV RAX,RBP
LEA RDI,[RBP + R15*0x1]
NOP dword ptr [RAX + RAX*0x1]
MOVZX EDX,byte ptr [RAX]
MOV RCX,RDI
SUB RCX,RAX
ADD RAX,0x1
MOV qword ptr [RSP + RDX*0x8 + 0x50],RCX
CMP R10,RAX
JNZ 0x001247c0
MOV RDX,R12
MOV RDI,RBP
CALL 0x00104350
TEST EAX,EAX
JZ 0x00124939
MOV RAX,R13
SUB RAX,R12
CMP RAX,R12
CMOVC RAX,R12
XOR R10D,R10D
ADD RAX,0x1
MOV qword ptr [RSP + 0x28],RAX
LEA RAX,[R12 + -0x1]
MOV qword ptr [RSP + 0x20],RAX
MOV EAX,0x1
SUB RAX,R12
MOV qword ptr [RSP + 0x18],RAX
JMP 0x00124826
ADD R10,RAX
MOV RBX,RCX
LEA RCX,[R10 + R13*0x1]
XOR ESI,ESI
LEA RDI,[R14 + RBX*0x1]
MOV qword ptr [RSP + 0x10],R10
MOV RDX,RCX
MOV qword ptr [RSP + 0x8],RCX
SUB RDX,RBX
CALL 0x00104330
TEST RAX,RAX
JNZ 0x00124904
MOV RCX,qword ptr [RSP + 0x8]
MOV R10,qword ptr [RSP + 0x10]
TEST RCX,RCX
JZ 0x00124904
MOVZX EAX,byte ptr [R14 + RCX*0x1 + -0x1]
MOV RAX,qword ptr [RSP + RAX*0x8 + 0x50]
TEST RAX,RAX
JNZ 0x00124820
LEA RDX,[R14 + R10*0x1]
CMP R12,R15
JNC 0x001248a3
MOV RAX,R12
MOVZX ESI,byte ptr [RBP + R12*0x1]
CMP byte ptr [RDX + R12*0x1],SIL
JZ 0x0012489a
JMP 0x001248e0
MOVZX EBX,byte ptr [RDX + RAX*0x1]
CMP byte ptr [RBP + RAX*0x1],BL
JNZ 0x001248e0
ADD RAX,0x1
CMP RAX,R15
JC 0x00124890
MOV RSI,qword ptr [RSP + 0x20]
MOV RAX,RSI
CMP RSI,-0x1
JZ 0x001248d5
MOVZX EDI,byte ptr [RBP + RSI*0x1]
CMP byte ptr [RDX + RSI*0x1],DIL
JZ 0x001248cb
JMP 0x0012492f
MOVZX EDI,byte ptr [RDX + RAX*0x1]
CMP byte ptr [RBP + RAX*0x1],DIL
JNZ 0x0012492f
SUB RAX,0x1
CMP RAX,-0x1
JNZ 0x001248c0
MOV RAX,RDX
JMP 0x00124906
ADD R10,qword ptr [RSP + 0x18]
JMP 0x00124820
MOV RDX,R12
MOV RDI,RBP
MOV R15,-0x1
CALL 0x00104350
TEST EAX,EAX
JNZ 0x001247ea
XOR EAX,EAX
MOV RSI,qword ptr [RSP + 0x858]
XOR RSI,qword ptr FS:[0x28]
JNZ 0x00124aa3
ADD RSP,0x868
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
ADD R10,qword ptr [RSP + 0x28]
JMP 0x00124823
LEA RAX,[R12 + -0x1]
XOR R11D,R11D
XOR ECX,ECX
MOV qword ptr [RSP + 0x38],RAX
MOV RAX,R13
SUB RAX,qword ptr [RSP + 0x20]
MOV qword ptr [RSP + 0x28],RAX
MOV EAX,0x1
SUB RAX,R12
MOV qword ptr [RSP + 0x30],RAX
JMP 0x00124981
CMP RAX,qword ptr [RSP + 0x20]
JNC 0x00124978
TEST R11,R11
CMOVNZ RAX,qword ptr [RSP + 0x28]
ADD RCX,RAX
XOR R11D,R11D
MOV RBX,R10
LEA R10,[RCX + R13*0x1]
XOR ESI,ESI
LEA RDI,[R14 + RBX*0x1]
MOV qword ptr [RSP + 0x18],R11
MOV RDX,R10
MOV qword ptr [RSP + 0x10],RCX
SUB RDX,RBX
MOV qword ptr [RSP + 0x8],R10
CALL 0x00104330
TEST RAX,RAX
JNZ 0x00124904
MOV R10,qword ptr [RSP + 0x8]
MOV RCX,qword ptr [RSP + 0x10]
MOV R11,qword ptr [RSP + 0x18]
TEST R10,R10
JZ 0x00124904
MOVZX EAX,byte ptr [R14 + R10*0x1 + -0x1]
MOV RAX,qword ptr [RSP + RAX*0x8 + 0x50]
TEST RAX,RAX
JNZ 0x00124968
CMP R11,R12
MOV RAX,R12
CMOVNC RAX,R11
CMP RAX,R15
JNC 0x00124a14
LEA RDX,[R14 + RCX*0x1]
MOVZX EDI,byte ptr [RDX + RAX*0x1]
CMP byte ptr [RBP + RAX*0x1],DIL
JZ 0x00124a0b
JMP 0x00124a70
MOVZX ESI,byte ptr [RDX + RAX*0x1]
CMP byte ptr [RBP + RAX*0x1],SIL
JNZ 0x00124a70
ADD RAX,0x1
CMP RAX,R15
JNZ 0x00124a00
MOV RBX,qword ptr [RSP + 0x38]
MOV RAX,RBX
CMP R11,R12
JNC 0x00124a95
LEA RDX,[R14 + RCX*0x1]
MOVZX EDI,byte ptr [RDX + RBX*0x1]
CMP byte ptr [RBP + RBX*0x1],DIL
JZ 0x00124a47
JMP 0x00124a95
MOVZX EDI,byte ptr [RAX + RDX*0x1 + -0x1]
CMP byte ptr [RBP + RAX*0x1 + -0x1],DIL
JNZ 0x00124a50
MOV RAX,RSI
LEA RSI,[RAX + -0x1]
CMP R11,RAX
JNZ 0x00124a38
ADD R11,0x1
CMP R11,RAX
JA 0x00124a9a
ADD RCX,qword ptr [RSP + 0x20]
MOV R11,qword ptr [RSP + 0x28]
JMP 0x0012497e
ADD RCX,qword ptr [RSP + 0x30]
JMP 0x00124978
MOV qword ptr [RSP + 0x48],0x1
LEA R12,[RCX + -0x1]
MOV qword ptr [RSP + 0x20],0x1
JMP 0x00124767
MOV RAX,R12
JMP 0x00124a50
LEA RAX,[R14 + RCX*0x1]
JMP 0x00124906
CALL 0x00104240
(translation_unit "long FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)\n\n{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}\n\n" (function_definition "long FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)\n\n{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)" identifier (parameter_list "(long param_1,long param_2,byte *param_3,ulong param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "byte *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "ulong *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "long lVar12;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar14;" type_identifier identifier ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_850;" type_identifier identifier ;) (declaration "ulong local_848 [257];" type_identifier (array_declarator "local_848 [257]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" if (parenthesized_expression "(param_4 < 3)" ( (binary_expression "param_4 < 3" identifier < number_literal) )) (compound_statement "{\n    local_850 = 1;\n    __n = param_4 - 1;\n  }" { (expression_statement "local_850 = 1;" (assignment_expression "local_850 = 1" identifier = number_literal) ;) (expression_statement "__n = param_4 - 1;" (assignment_expression "__n = param_4 - 1" identifier = (binary_expression "param_4 - 1" identifier - number_literal)) ;) }) (else_clause "else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" else (compound_statement "{\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" { (expression_statement "__n = FUN_001245c0(param_3,param_4,&local_850);" (assignment_expression "__n = FUN_001245c0(param_3,param_4,&local_850)" identifier = (call_expression "FUN_001245c0(param_3,param_4,&local_850)" identifier (argument_list "(param_3,param_4,&local_850)" ( identifier , identifier , (pointer_expression "&local_850" & identifier) )))) ;) }))) (expression_statement "uVar7 = local_850;" (assignment_expression "uVar7 = local_850" identifier = identifier) ;) (expression_statement "puVar5 = local_848;" (assignment_expression "puVar5 = local_848" identifier = identifier) ;) (do_statement "do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);" do (compound_statement "{\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  }" { (expression_statement "*puVar5 = param_4;" (assignment_expression "*puVar5 = param_4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "puVar5[1] = param_4;" (assignment_expression "puVar5[1] = param_4" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5 = puVar5 + 2;" (assignment_expression "puVar5 = puVar5 + 2" identifier = (binary_expression "puVar5 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_848 + 0x100 != puVar5)" ( (binary_expression "local_848 + 0x100 != puVar5" (binary_expression "local_848 + 0x100" identifier + number_literal) != identifier) )) ;) (if_statement "if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }" { (expression_statement "uVar15 = 0xffffffffffffffff;" (assignment_expression "uVar15 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "iVar4 = memcmp(param_3,param_3 + local_850,__n);" (assignment_expression "iVar4 = memcmp(param_3,param_3 + local_850,__n)" identifier = (call_expression "memcmp(param_3,param_3 + local_850,__n)" identifier (argument_list "(param_3,param_3 + local_850,__n)" ( identifier , (binary_expression "param_3 + local_850" identifier + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return lVar12;\n    }" { (labeled_statement "LAB_00124904:\n      lVar12 = 0;" statement_identifier : (expression_statement "lVar12 = 0;" (assignment_expression "lVar12 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }" statement_identifier : (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return lVar12;" return identifier ;) })) }) (else_clause "else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" else (compound_statement "{\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" { (expression_statement "uVar15 = param_4 - 1;" (assignment_expression "uVar15 = param_4 - 1" identifier = (binary_expression "param_4 - 1" identifier - number_literal)) ;) (expression_statement "pbVar6 = param_3;" (assignment_expression "pbVar6 = param_3" identifier = identifier) ;) (do_statement "do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);" do (compound_statement "{\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    }" { (expression_statement "bVar2 = *pbVar6;" (assignment_expression "bVar2 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "lVar12 = uVar15 - (long)pbVar6;" (assignment_expression "lVar12 = uVar15 - (long)pbVar6" identifier = (binary_expression "uVar15 - (long)pbVar6" identifier - (cast_expression "(long)pbVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "pbVar6 = pbVar6 + 1;" (assignment_expression "pbVar6 = pbVar6 + 1" identifier = (binary_expression "pbVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_848[bVar2] = (ulong)(param_3 + lVar12);" (assignment_expression "local_848[bVar2] = (ulong)(param_3 + lVar12)" (subscript_expression "local_848[bVar2]" identifier [ identifier ]) = (call_expression "(ulong)(param_3 + lVar12)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 + lVar12)" ( (binary_expression "param_3 + lVar12" identifier + identifier) )))) ;) }) while (parenthesized_expression "(param_3 + param_4 != pbVar6)" ( (binary_expression "param_3 + param_4 != pbVar6" (binary_expression "param_3 + param_4" identifier + identifier) != identifier) )) ;) (expression_statement "iVar4 = memcmp(param_3,param_3 + local_850,__n);" (assignment_expression "iVar4 = memcmp(param_3,param_3 + local_850,__n)" identifier = (call_expression "memcmp(param_3,param_3 + local_850,__n)" identifier (argument_list "(param_3,param_3 + local_850,__n)" ( identifier , (binary_expression "param_3 + local_850" identifier + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }" { (expression_statement "uVar9 = __n - 1;" (assignment_expression "uVar9 = __n - 1" identifier = (binary_expression "__n - 1" identifier - number_literal)) ;) (expression_statement "lVar12 = 0;" (assignment_expression "lVar12 = 0" identifier = number_literal) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (labeled_statement "LAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );" statement_identifier : (do_statement "do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );" do (compound_statement "{\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      }" { (expression_statement "lVar1 = lVar12 + param_4;" (assignment_expression "lVar1 = lVar12 + param_4" identifier = (binary_expression "lVar12 + param_4" identifier + identifier)) ;) (expression_statement "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);" (assignment_expression "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2)" identifier = (call_expression "memchr((void *)(param_1 + param_2),0,lVar1 - param_2)" identifier (argument_list "((void *)(param_1 + param_2),0,lVar1 - param_2)" ( (cast_expression "(void *)(param_1 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_2)" ( (binary_expression "param_1 + param_2" identifier + identifier) ))) , number_literal , (binary_expression "lVar1 - param_2" identifier - identifier) )))) ;) (if_statement "if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;" if (parenthesized_expression "((pvVar8 != (void *)0x0) || (lVar1 == 0))" ( (binary_expression "(pvVar8 != (void *)0x0) || (lVar1 == 0)" (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_00124904;" goto statement_identifier ;)) (expression_statement "uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];" (assignment_expression "uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)]" identifier = (subscript_expression "local_848[*(byte *)(param_1 + -1 + lVar1)]" identifier [ (pointer_expression "*(byte *)(param_1 + -1 + lVar1)" * (cast_expression "(byte *)(param_1 + -1 + lVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -1 + lVar1)" ( (binary_expression "param_1 + -1 + lVar1" (binary_expression "param_1 + -1" identifier + number_literal) + identifier) )))) ])) ;) (expression_statement "param_2 = lVar1;" (assignment_expression "param_2 = lVar1" identifier = identifier) ;) (if_statement "if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }" { (expression_statement "uVar11 = __n;" (assignment_expression "uVar11 = __n" identifier = identifier) ;) (if_statement "if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }" if (parenthesized_expression "(__n <= uVar14)" ( (binary_expression "__n <= uVar14" identifier <= identifier) )) (compound_statement "{\n            uVar11 = uVar14;\n          }" { (expression_statement "uVar11 = uVar14;" (assignment_expression "uVar11 = uVar14" identifier = identifier) ;) })) (if_statement "if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }" if (parenthesized_expression "(uVar15 <= uVar11)" ( (binary_expression "uVar15 <= uVar11" identifier <= identifier) )) (compound_statement "{\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }" { (labeled_statement "LAB_00124a14:\n            uVar11 = __n;" statement_identifier : (expression_statement "uVar11 = __n;" (assignment_expression "uVar11 = __n" identifier = identifier) ;)) (if_statement "if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }" if (parenthesized_expression "((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)))" ( (binary_expression "(uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))" (parenthesized_expression "(uVar14 < __n)" ( (binary_expression "uVar14 < __n" identifier < identifier) )) && (parenthesized_expression "(uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))" ( (comma_expression "uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)" (assignment_expression "uVar3 = uVar9" identifier = identifier) , (binary_expression "param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)" (subscript_expression "param_3[uVar9]" identifier [ identifier ]) == (pointer_expression "*(byte *)(param_1 + lVar12 + uVar9)" * (cast_expression "(byte *)(param_1 + lVar12 + uVar9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar12 + uVar9)" ( (binary_expression "param_1 + lVar12 + uVar9" (binary_expression "param_1 + lVar12" identifier + identifier) + identifier) )))))) ))) )) (compound_statement "{\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }" { (do_statement "do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));" do (compound_statement "{\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              }" { (expression_statement "uVar11 = uVar3;" (assignment_expression "uVar11 = uVar3" identifier = identifier) ;) (if_statement "if (uVar14 == uVar11) break;" if (parenthesized_expression "(uVar14 == uVar11)" ( (binary_expression "uVar14 == uVar11" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = uVar11 - 1;" (assignment_expression "uVar3 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12))" ( (binary_expression "param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12)" (subscript_expression "param_3[uVar11 - 1]" identifier [ (binary_expression "uVar11 - 1" identifier - number_literal) ]) == (pointer_expression "*(byte *)((uVar11 - 1) + param_1 + lVar12)" * (cast_expression "(byte *)((uVar11 - 1) + param_1 + lVar12)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar11 - 1) + param_1 + lVar12)" ( (binary_expression "(uVar11 - 1) + param_1 + lVar12" (binary_expression "(uVar11 - 1) + param_1" (parenthesized_expression "(uVar11 - 1)" ( (binary_expression "uVar11 - 1" identifier - number_literal) )) + identifier) + identifier) ))))) )) ;) })) (if_statement "if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }" if (parenthesized_expression "(uVar11 < uVar14 + 1)" ( (binary_expression "uVar11 < uVar14 + 1" identifier < (binary_expression "uVar14 + 1" identifier + number_literal)) )) (compound_statement "{\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }" { (expression_statement "lVar12 = param_1 + lVar12;" (assignment_expression "lVar12 = param_1 + lVar12" identifier = (binary_expression "param_1 + lVar12" identifier + identifier)) ;) (goto_statement "goto LAB_00124906;" goto statement_identifier ;) })) (expression_statement "lVar12 = lVar12 + uVar7;" (assignment_expression "lVar12 = lVar12 + uVar7" identifier = (binary_expression "lVar12 + uVar7" identifier + identifier)) ;) (expression_statement "uVar14 = param_4 - uVar7;" (assignment_expression "uVar14 = param_4 - uVar7" identifier = (binary_expression "param_4 - uVar7" identifier - identifier)) ;) (goto_statement "goto LAB_00124981;" goto statement_identifier ;) })) (if_statement "if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }" if (parenthesized_expression "(param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11))" ( (binary_expression "param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)" (subscript_expression "param_3[uVar11]" identifier [ identifier ]) == (pointer_expression "*(byte *)(param_1 + lVar12 + uVar11)" * (cast_expression "(byte *)(param_1 + lVar12 + uVar11)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar12 + uVar11)" ( (binary_expression "param_1 + lVar12 + uVar11" (binary_expression "param_1 + lVar12" identifier + identifier) + identifier) ))))) )) (compound_statement "{\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }" { (do_statement "do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));" do (compound_statement "{\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            }" { (expression_statement "uVar11 = uVar11 + 1;" (assignment_expression "uVar11 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) ;) (if_statement "if (uVar11 == uVar15) goto LAB_00124a14;" if (parenthesized_expression "(uVar11 == uVar15)" ( (binary_expression "uVar11 == uVar15" identifier == identifier) )) (goto_statement "goto LAB_00124a14;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11))" ( (binary_expression "param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)" (subscript_expression "param_3[uVar11]" identifier [ identifier ]) == (pointer_expression "*(byte *)(param_1 + lVar12 + uVar11)" * (cast_expression "(byte *)(param_1 + lVar12 + uVar11)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar12 + uVar11)" ( (binary_expression "param_1 + lVar12 + uVar11" (binary_expression "param_1 + lVar12" identifier + identifier) + identifier) ))))) )) ;) })) (expression_statement "lVar12 = lVar12 + (1 - __n);" (assignment_expression "lVar12 = lVar12 + (1 - __n)" identifier = (binary_expression "lVar12 + (1 - __n)" identifier + (parenthesized_expression "(1 - __n)" ( (binary_expression "1 - __n" number_literal - identifier) )))) ;) }) (else_clause "else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" else (if_statement "if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" if (parenthesized_expression "((uVar11 < uVar7) && (uVar14 != 0))" ( (binary_expression "(uVar11 < uVar7) && (uVar14 != 0)" (parenthesized_expression "(uVar11 < uVar7)" ( (binary_expression "uVar11 < uVar7" identifier < identifier) )) && (parenthesized_expression "(uVar14 != 0)" ( (binary_expression "uVar14 != 0" identifier != number_literal) ))) )) (compound_statement "{\n          uVar11 = param_4 - uVar7;\n        }" { (expression_statement "uVar11 = param_4 - uVar7;" (assignment_expression "uVar11 = param_4 - uVar7" identifier = (binary_expression "param_4 - uVar7" identifier - identifier)) ;) })))) (expression_statement "lVar12 = lVar12 + uVar11;" (assignment_expression "lVar12 = lVar12 + uVar11" identifier = (binary_expression "lVar12 + uVar11" identifier + identifier)) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })) }))) (expression_statement "uVar7 = param_4 - __n;" (assignment_expression "uVar7 = param_4 - __n" identifier = (binary_expression "param_4 - __n" identifier - identifier)) ;) (if_statement "if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }" if (parenthesized_expression "(param_4 - __n < __n)" ( (binary_expression "param_4 - __n < __n" (binary_expression "param_4 - __n" identifier - identifier) < identifier) )) (compound_statement "{\n    uVar7 = __n;\n  }" { (expression_statement "uVar7 = __n;" (assignment_expression "uVar7 = __n" identifier = identifier) ;) })) (expression_statement "lVar13 = 0;" (assignment_expression "lVar13 = 0" identifier = number_literal) ;) (expression_statement "lVar1 = __n - 1;" (assignment_expression "lVar1 = __n - 1" identifier = (binary_expression "__n - 1" identifier - number_literal)) ;) (labeled_statement "LAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );" statement_identifier : (do_statement "do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );" do (compound_statement "{\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  }" { (expression_statement "lVar12 = lVar13 + param_4;" (assignment_expression "lVar12 = lVar13 + param_4" identifier = (binary_expression "lVar13 + param_4" identifier + identifier)) ;) (expression_statement "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);" (assignment_expression "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2)" identifier = (call_expression "memchr((void *)(param_1 + param_2),0,lVar12 - param_2)" identifier (argument_list "((void *)(param_1 + param_2),0,lVar12 - param_2)" ( (cast_expression "(void *)(param_1 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_2)" ( (binary_expression "param_1 + param_2" identifier + identifier) ))) , number_literal , (binary_expression "lVar12 - param_2" identifier - identifier) )))) ;) (if_statement "if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;" if (parenthesized_expression "((pvVar8 != (void *)0x0) || (lVar12 == 0))" ( (binary_expression "(pvVar8 != (void *)0x0) || (lVar12 == 0)" (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(lVar12 == 0)" ( (binary_expression "lVar12 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_00124904;" goto statement_identifier ;)) (expression_statement "uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];" (assignment_expression "uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)]" identifier = (subscript_expression "local_848[*(byte *)(param_1 + -1 + lVar12)]" identifier [ (pointer_expression "*(byte *)(param_1 + -1 + lVar12)" * (cast_expression "(byte *)(param_1 + -1 + lVar12)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -1 + lVar12)" ( (binary_expression "param_1 + -1 + lVar12" (binary_expression "param_1 + -1" identifier + number_literal) + identifier) )))) ])) ;) (expression_statement "param_2 = lVar12;" (assignment_expression "param_2 = lVar12" identifier = identifier) ;) (if_statement "if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }" if (parenthesized_expression "(uVar9 == 0)" ( (binary_expression "uVar9 == 0" identifier == number_literal) )) (compound_statement "{\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }" { (expression_statement "lVar12 = param_1 + lVar13;" (assignment_expression "lVar12 = param_1 + lVar13" identifier = (binary_expression "param_1 + lVar13" identifier + identifier)) ;) (if_statement "if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }" if (parenthesized_expression "(uVar15 <= __n)" ( (binary_expression "uVar15 <= __n" identifier <= identifier) )) (compound_statement "{\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }" { (labeled_statement "LAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;" statement_identifier : (if_statement "if (lVar1 == -1) goto LAB_00124906;" if (parenthesized_expression "(lVar1 == -1)" ( (binary_expression "lVar1 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00124906;" goto statement_identifier ;))) (expression_statement "lVar10 = lVar1;" (assignment_expression "lVar10 = lVar1" identifier = identifier) ;) (if_statement "if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }" if (parenthesized_expression "(*(byte *)(lVar12 + lVar1) == param_3[lVar1])" ( (binary_expression "*(byte *)(lVar12 + lVar1) == param_3[lVar1]" (pointer_expression "*(byte *)(lVar12 + lVar1)" * (cast_expression "(byte *)(lVar12 + lVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + lVar1)" ( (binary_expression "lVar12 + lVar1" identifier + identifier) )))) == (subscript_expression "param_3[lVar1]" identifier [ identifier ])) )) (compound_statement "{\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }" { (do_statement "do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));" do (compound_statement "{\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          }" { (expression_statement "lVar10 = lVar10 + -1;" (assignment_expression "lVar10 = lVar10 + -1" identifier = (binary_expression "lVar10 + -1" identifier + number_literal)) ;) (if_statement "if (lVar10 == -1) goto LAB_00124906;" if (parenthesized_expression "(lVar10 == -1)" ( (binary_expression "lVar10 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00124906;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_3[lVar10] == *(byte *)(lVar12 + lVar10))" ( (binary_expression "param_3[lVar10] == *(byte *)(lVar12 + lVar10)" (subscript_expression "param_3[lVar10]" identifier [ identifier ]) == (pointer_expression "*(byte *)(lVar12 + lVar10)" * (cast_expression "(byte *)(lVar12 + lVar10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + lVar10)" ( (binary_expression "lVar12 + lVar10" identifier + identifier) ))))) )) ;) })) (expression_statement "lVar13 = lVar13 + uVar7 + 1;" (assignment_expression "lVar13 = lVar13 + uVar7 + 1" identifier = (binary_expression "lVar13 + uVar7 + 1" (binary_expression "lVar13 + uVar7" identifier + identifier) + number_literal)) ;) (goto_statement "goto LAB_00124826;" goto statement_identifier ;) })) (expression_statement "uVar9 = __n;" (assignment_expression "uVar9 = __n" identifier = identifier) ;) (if_statement "if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }" if (parenthesized_expression "(*(byte *)(lVar12 + __n) == param_3[__n])" ( (binary_expression "*(byte *)(lVar12 + __n) == param_3[__n]" (pointer_expression "*(byte *)(lVar12 + __n)" * (cast_expression "(byte *)(lVar12 + __n)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + __n)" ( (binary_expression "lVar12 + __n" identifier + identifier) )))) == (subscript_expression "param_3[__n]" identifier [ identifier ])) )) (compound_statement "{\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }" { (do_statement "do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));" do (compound_statement "{\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        }" { (expression_statement "uVar9 = uVar9 + 1;" (assignment_expression "uVar9 = uVar9 + 1" identifier = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (if_statement "if (uVar15 <= uVar9) goto LAB_001248a3;" if (parenthesized_expression "(uVar15 <= uVar9)" ( (binary_expression "uVar15 <= uVar9" identifier <= identifier) )) (goto_statement "goto LAB_001248a3;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_3[uVar9] == *(byte *)(lVar12 + uVar9))" ( (binary_expression "param_3[uVar9] == *(byte *)(lVar12 + uVar9)" (subscript_expression "param_3[uVar9]" identifier [ identifier ]) == (pointer_expression "*(byte *)(lVar12 + uVar9)" * (cast_expression "(byte *)(lVar12 + uVar9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + uVar9)" ( (binary_expression "lVar12 + uVar9" identifier + identifier) ))))) )) ;) })) (expression_statement "lVar13 = lVar13 + (1 - __n);" (assignment_expression "lVar13 = lVar13 + (1 - __n)" identifier = (binary_expression "lVar13 + (1 - __n)" identifier + (parenthesized_expression "(1 - __n)" ( (binary_expression "1 - __n" number_literal - identifier) )))) ;) })) (expression_statement "lVar13 = lVar13 + uVar9;" (assignment_expression "lVar13 = lVar13 + uVar9" identifier = (binary_expression "lVar13 + uVar9" identifier + identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "char * two_way_long_needle(uchar *haystack,size_t haystack_len,uchar *needle,size_t needle_len)\n\n{\n  size_t sVar1;\n  size_t sVar2;\n  byte bVar3;\n  ulong uVar4;\n  int iVar5;\n  ulong __n;\n  size_t *psVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  void *pvVar9;\n  ulong uVar10;\n  long lVar11;\n  uchar *puVar12;\n  ulong uVar13;\n  long lVar14;\n  long lVar15;\n  ulong uVar16;\n  long in_FS_OFFSET;\n  size_t period;\n  size_t shift_table [256];\n  size_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (needle_len < 3) {\n    period = 1;\n    __n = needle_len - 1;\n  }\n  else {\n    __n = critical_factorization(needle,needle_len,&period);\n  }\n  sVar1 = period;\n  psVar6 = shift_table;\n  do {\n    *psVar6 = needle_len;\n    psVar6[1] = needle_len;\n    psVar6 = psVar6 + 2;\n  } while (&local_48 != psVar6);\n  if (needle_len == 0) {\n    uVar16 = 0xffffffffffffffff;\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }\n  }\n  else {\n    uVar16 = needle_len - 1;\n    pbVar7 = needle;\n    do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }\n  }\n  uVar8 = needle_len - __n;\n  if (needle_len - __n < __n) {\n    uVar8 = __n;\n  }\n  lVar15 = 0;\n  lVar14 = __n - 1;\nLAB_00124826:\n  do {\n    sVar1 = lVar15 + needle_len;\n    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);\n    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;\n    uVar10 = shift_table[haystack[sVar1 - 1]];\n    haystack_len = sVar1;\n    if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }\n    lVar15 = lVar15 + uVar10;\n  } while( true );\n}\n\n" (function_definition "char * two_way_long_needle(uchar *haystack,size_t haystack_len,uchar *needle,size_t needle_len)\n\n{\n  size_t sVar1;\n  size_t sVar2;\n  byte bVar3;\n  ulong uVar4;\n  int iVar5;\n  ulong __n;\n  size_t *psVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  void *pvVar9;\n  ulong uVar10;\n  long lVar11;\n  uchar *puVar12;\n  ulong uVar13;\n  long lVar14;\n  long lVar15;\n  ulong uVar16;\n  long in_FS_OFFSET;\n  size_t period;\n  size_t shift_table [256];\n  size_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (needle_len < 3) {\n    period = 1;\n    __n = needle_len - 1;\n  }\n  else {\n    __n = critical_factorization(needle,needle_len,&period);\n  }\n  sVar1 = period;\n  psVar6 = shift_table;\n  do {\n    *psVar6 = needle_len;\n    psVar6[1] = needle_len;\n    psVar6 = psVar6 + 2;\n  } while (&local_48 != psVar6);\n  if (needle_len == 0) {\n    uVar16 = 0xffffffffffffffff;\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }\n  }\n  else {\n    uVar16 = needle_len - 1;\n    pbVar7 = needle;\n    do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }\n  }\n  uVar8 = needle_len - __n;\n  if (needle_len - __n < __n) {\n    uVar8 = __n;\n  }\n  lVar15 = 0;\n  lVar14 = __n - 1;\nLAB_00124826:\n  do {\n    sVar1 = lVar15 + needle_len;\n    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);\n    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;\n    uVar10 = shift_table[haystack[sVar1 - 1]];\n    haystack_len = sVar1;\n    if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }\n    lVar15 = lVar15 + uVar10;\n  } while( true );\n}" primitive_type (pointer_declarator "* two_way_long_needle(uchar *haystack,size_t haystack_len,uchar *needle,size_t needle_len)" * (function_declarator "two_way_long_needle(uchar *haystack,size_t haystack_len,uchar *needle,size_t needle_len)" identifier (parameter_list "(uchar *haystack,size_t haystack_len,uchar *needle,size_t needle_len)" ( (parameter_declaration "uchar *haystack" type_identifier (pointer_declarator "*haystack" * identifier)) , (parameter_declaration "size_t haystack_len" primitive_type identifier) , (parameter_declaration "uchar *needle" type_identifier (pointer_declarator "*needle" * identifier)) , (parameter_declaration "size_t needle_len" primitive_type identifier) )))) (compound_statement "{\n  size_t sVar1;\n  size_t sVar2;\n  byte bVar3;\n  ulong uVar4;\n  int iVar5;\n  ulong __n;\n  size_t *psVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  void *pvVar9;\n  ulong uVar10;\n  long lVar11;\n  uchar *puVar12;\n  ulong uVar13;\n  long lVar14;\n  long lVar15;\n  ulong uVar16;\n  long in_FS_OFFSET;\n  size_t period;\n  size_t shift_table [256];\n  size_t local_48;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (needle_len < 3) {\n    period = 1;\n    __n = needle_len - 1;\n  }\n  else {\n    __n = critical_factorization(needle,needle_len,&period);\n  }\n  sVar1 = period;\n  psVar6 = shift_table;\n  do {\n    *psVar6 = needle_len;\n    psVar6[1] = needle_len;\n    psVar6 = psVar6 + 2;\n  } while (&local_48 != psVar6);\n  if (needle_len == 0) {\n    uVar16 = 0xffffffffffffffff;\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }\n  }\n  else {\n    uVar16 = needle_len - 1;\n    pbVar7 = needle;\n    do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }\n  }\n  uVar8 = needle_len - __n;\n  if (needle_len - __n < __n) {\n    uVar8 = __n;\n  }\n  lVar15 = 0;\n  lVar14 = __n - 1;\nLAB_00124826:\n  do {\n    sVar1 = lVar15 + needle_len;\n    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);\n    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;\n    uVar10 = shift_table[haystack[sVar1 - 1]];\n    haystack_len = sVar1;\n    if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }\n    lVar15 = lVar15 + uVar10;\n  } while( true );\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "size_t *psVar6;" primitive_type (pointer_declarator "*psVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "void *pvVar9;" primitive_type (pointer_declarator "*pvVar9" * identifier) ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "uchar *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "ulong uVar13;" type_identifier identifier ;) (declaration "long lVar14;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar15;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar16;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t period;" primitive_type identifier ;) (declaration "size_t shift_table [256];" primitive_type (array_declarator "shift_table [256]" identifier [ number_literal ]) ;) (declaration "size_t local_48;" primitive_type identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (needle_len < 3) {\n    period = 1;\n    __n = needle_len - 1;\n  }\n  else {\n    __n = critical_factorization(needle,needle_len,&period);\n  }" if (parenthesized_expression "(needle_len < 3)" ( (binary_expression "needle_len < 3" identifier < number_literal) )) (compound_statement "{\n    period = 1;\n    __n = needle_len - 1;\n  }" { (expression_statement "period = 1;" (assignment_expression "period = 1" identifier = number_literal) ;) (expression_statement "__n = needle_len - 1;" (assignment_expression "__n = needle_len - 1" identifier = (binary_expression "needle_len - 1" identifier - number_literal)) ;) }) (else_clause "else {\n    __n = critical_factorization(needle,needle_len,&period);\n  }" else (compound_statement "{\n    __n = critical_factorization(needle,needle_len,&period);\n  }" { (expression_statement "__n = critical_factorization(needle,needle_len,&period);" (assignment_expression "__n = critical_factorization(needle,needle_len,&period)" identifier = (call_expression "critical_factorization(needle,needle_len,&period)" identifier (argument_list "(needle,needle_len,&period)" ( identifier , identifier , (pointer_expression "&period" & identifier) )))) ;) }))) (expression_statement "sVar1 = period;" (assignment_expression "sVar1 = period" identifier = identifier) ;) (expression_statement "psVar6 = shift_table;" (assignment_expression "psVar6 = shift_table" identifier = identifier) ;) (do_statement "do {\n    *psVar6 = needle_len;\n    psVar6[1] = needle_len;\n    psVar6 = psVar6 + 2;\n  } while (&local_48 != psVar6);" do (compound_statement "{\n    *psVar6 = needle_len;\n    psVar6[1] = needle_len;\n    psVar6 = psVar6 + 2;\n  }" { (expression_statement "*psVar6 = needle_len;" (assignment_expression "*psVar6 = needle_len" (pointer_expression "*psVar6" * identifier) = identifier) ;) (expression_statement "psVar6[1] = needle_len;" (assignment_expression "psVar6[1] = needle_len" (subscript_expression "psVar6[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "psVar6 = psVar6 + 2;" (assignment_expression "psVar6 = psVar6 + 2" identifier = (binary_expression "psVar6 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(&local_48 != psVar6)" ( (binary_expression "&local_48 != psVar6" (pointer_expression "&local_48" & identifier) != identifier) )) ;) (if_statement "if (needle_len == 0) {\n    uVar16 = 0xffffffffffffffff;\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }\n  }\n  else {\n    uVar16 = needle_len - 1;\n    pbVar7 = needle;\n    do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }\n  }" if (parenthesized_expression "(needle_len == 0)" ( (binary_expression "needle_len == 0" identifier == number_literal) )) (compound_statement "{\n    uVar16 = 0xffffffffffffffff;\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }\n  }" { (expression_statement "uVar16 = 0xffffffffffffffff;" (assignment_expression "uVar16 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "iVar5 = memcmp(needle,needle + period,__n);" (assignment_expression "iVar5 = memcmp(needle,needle + period,__n)" identifier = (call_expression "memcmp(needle,needle + period,__n)" identifier (argument_list "(needle,needle + period,__n)" ( identifier , (binary_expression "needle + period" identifier + identifier) , identifier )))) ;) (if_statement "if (iVar5 == 0) {\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00124904:\n      puVar12 = (uchar *)0x0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }\n      return (char *)puVar12;\n    }" { (labeled_statement "LAB_00124904:\n      puVar12 = (uchar *)0x0;" statement_identifier : (expression_statement "puVar12 = (uchar *)0x0;" (assignment_expression "puVar12 = (uchar *)0x0" identifier = (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (labeled_statement "LAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }" statement_identifier : (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        __stack_chk_fail();\n      }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return (char *)puVar12;" return (cast_expression "(char *)puVar12" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ;) })) }) (else_clause "else {\n    uVar16 = needle_len - 1;\n    pbVar7 = needle;\n    do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }\n  }" else (compound_statement "{\n    uVar16 = needle_len - 1;\n    pbVar7 = needle;\n    do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);\n    iVar5 = memcmp(needle,needle + period,__n);\n    if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }\n  }" { (expression_statement "uVar16 = needle_len - 1;" (assignment_expression "uVar16 = needle_len - 1" identifier = (binary_expression "needle_len - 1" identifier - number_literal)) ;) (expression_statement "pbVar7 = needle;" (assignment_expression "pbVar7 = needle" identifier = identifier) ;) (do_statement "do {\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    } while (needle + needle_len != pbVar7);" do (compound_statement "{\n      bVar3 = *pbVar7;\n      lVar14 = uVar16 - (long)pbVar7;\n      pbVar7 = pbVar7 + 1;\n      shift_table[bVar3] = (size_t)(needle + lVar14);\n    }" { (expression_statement "bVar3 = *pbVar7;" (assignment_expression "bVar3 = *pbVar7" identifier = (pointer_expression "*pbVar7" * identifier)) ;) (expression_statement "lVar14 = uVar16 - (long)pbVar7;" (assignment_expression "lVar14 = uVar16 - (long)pbVar7" identifier = (binary_expression "uVar16 - (long)pbVar7" identifier - (cast_expression "(long)pbVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) (expression_statement "shift_table[bVar3] = (size_t)(needle + lVar14);" (assignment_expression "shift_table[bVar3] = (size_t)(needle + lVar14)" (subscript_expression "shift_table[bVar3]" identifier [ identifier ]) = (cast_expression "(size_t)(needle + lVar14)" ( (type_descriptor "size_t" primitive_type) ) (parenthesized_expression "(needle + lVar14)" ( (binary_expression "needle + lVar14" identifier + identifier) )))) ;) }) while (parenthesized_expression "(needle + needle_len != pbVar7)" ( (binary_expression "needle + needle_len != pbVar7" (binary_expression "needle + needle_len" identifier + identifier) != identifier) )) ;) (expression_statement "iVar5 = memcmp(needle,needle + period,__n);" (assignment_expression "iVar5 = memcmp(needle,needle + period,__n)" identifier = (call_expression "memcmp(needle,needle + period,__n)" identifier (argument_list "(needle,needle + period,__n)" ( identifier , (binary_expression "needle + period" identifier + identifier) , identifier )))) ;) (if_statement "if (iVar5 == 0) {\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar8 = __n - 1;\n      lVar14 = 0;\n      uVar10 = 0;\nLAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );\n    }" { (expression_statement "uVar8 = __n - 1;" (assignment_expression "uVar8 = __n - 1" identifier = (binary_expression "__n - 1" identifier - number_literal)) ;) (expression_statement "lVar14 = 0;" (assignment_expression "lVar14 = 0" identifier = number_literal) ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (labeled_statement "LAB_00124981:\n      do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );" statement_identifier : (do_statement "do {\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      } while( true );" do (compound_statement "{\n        sVar2 = lVar14 + needle_len;\n        pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);\n        if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;\n        uVar13 = shift_table[haystack[sVar2 - 1]];\n        haystack_len = sVar2;\n        if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }\n        lVar14 = lVar14 + uVar13;\n        uVar10 = 0;\n      }" { (expression_statement "sVar2 = lVar14 + needle_len;" (assignment_expression "sVar2 = lVar14 + needle_len" identifier = (binary_expression "lVar14 + needle_len" identifier + identifier)) ;) (expression_statement "pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len);" (assignment_expression "pvVar9 = memchr(haystack + haystack_len,0,sVar2 - haystack_len)" identifier = (call_expression "memchr(haystack + haystack_len,0,sVar2 - haystack_len)" identifier (argument_list "(haystack + haystack_len,0,sVar2 - haystack_len)" ( (binary_expression "haystack + haystack_len" identifier + identifier) , number_literal , (binary_expression "sVar2 - haystack_len" identifier - identifier) )))) ;) (if_statement "if ((pvVar9 != (void *)0x0) || (sVar2 == 0)) goto LAB_00124904;" if (parenthesized_expression "((pvVar9 != (void *)0x0) || (sVar2 == 0))" ( (binary_expression "(pvVar9 != (void *)0x0) || (sVar2 == 0)" (parenthesized_expression "(pvVar9 != (void *)0x0)" ( (binary_expression "pvVar9 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(sVar2 == 0)" ( (binary_expression "sVar2 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_00124904;" goto statement_identifier ;)) (expression_statement "uVar13 = shift_table[haystack[sVar2 - 1]];" (assignment_expression "uVar13 = shift_table[haystack[sVar2 - 1]]" identifier = (subscript_expression "shift_table[haystack[sVar2 - 1]]" identifier [ (subscript_expression "haystack[sVar2 - 1]" identifier [ (binary_expression "sVar2 - 1" identifier - number_literal) ]) ])) ;) (expression_statement "haystack_len = sVar2;" (assignment_expression "haystack_len = sVar2" identifier = identifier) ;) (if_statement "if (uVar13 == 0) {\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }\n        else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar13 = __n;\n          if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }\n          if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }\n          if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }\n          lVar14 = lVar14 + (1 - __n);\n        }" { (expression_statement "uVar13 = __n;" (assignment_expression "uVar13 = __n" identifier = identifier) ;) (if_statement "if (__n <= uVar10) {\n            uVar13 = uVar10;\n          }" if (parenthesized_expression "(__n <= uVar10)" ( (binary_expression "__n <= uVar10" identifier <= identifier) )) (compound_statement "{\n            uVar13 = uVar10;\n          }" { (expression_statement "uVar13 = uVar10;" (assignment_expression "uVar13 = uVar10" identifier = identifier) ;) })) (if_statement "if (uVar16 <= uVar13) {\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }" if (parenthesized_expression "(uVar16 <= uVar13)" ( (binary_expression "uVar16 <= uVar13" identifier <= identifier) )) (compound_statement "{\nLAB_00124a14:\n            uVar13 = __n;\n            if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }\n            if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }\n            lVar14 = lVar14 + sVar1;\n            uVar10 = needle_len - sVar1;\n            goto LAB_00124981;\n          }" { (labeled_statement "LAB_00124a14:\n            uVar13 = __n;" statement_identifier : (expression_statement "uVar13 = __n;" (assignment_expression "uVar13 = __n" identifier = identifier) ;)) (if_statement "if ((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])) {\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }" if (parenthesized_expression "((uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14]))" ( (binary_expression "(uVar10 < __n) && (uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])" (parenthesized_expression "(uVar10 < __n)" ( (binary_expression "uVar10 < __n" identifier < identifier) )) && (parenthesized_expression "(uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14])" ( (comma_expression "uVar4 = uVar8, needle[uVar8] == haystack[uVar8 + lVar14]" (assignment_expression "uVar4 = uVar8" identifier = identifier) , (binary_expression "needle[uVar8] == haystack[uVar8 + lVar14]" (subscript_expression "needle[uVar8]" identifier [ identifier ]) == (subscript_expression "haystack[uVar8 + lVar14]" identifier [ (binary_expression "uVar8 + lVar14" identifier + identifier) ]))) ))) )) (compound_statement "{\n              do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);\n            }" { (do_statement "do {\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              } while (needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]);" do (compound_statement "{\n                uVar13 = uVar4;\n                if (uVar10 == uVar13) break;\n                uVar4 = uVar13 - 1;\n              }" { (expression_statement "uVar13 = uVar4;" (assignment_expression "uVar13 = uVar4" identifier = identifier) ;) (if_statement "if (uVar10 == uVar13) break;" if (parenthesized_expression "(uVar10 == uVar13)" ( (binary_expression "uVar10 == uVar13" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar4 = uVar13 - 1;" (assignment_expression "uVar4 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14])" ( (binary_expression "needle[uVar13 - 1] == haystack[(uVar13 - 1) + lVar14]" (subscript_expression "needle[uVar13 - 1]" identifier [ (binary_expression "uVar13 - 1" identifier - number_literal) ]) == (subscript_expression "haystack[(uVar13 - 1) + lVar14]" identifier [ (binary_expression "(uVar13 - 1) + lVar14" (parenthesized_expression "(uVar13 - 1)" ( (binary_expression "uVar13 - 1" identifier - number_literal) )) + identifier) ])) )) ;) })) (if_statement "if (uVar13 < uVar10 + 1) {\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }" if (parenthesized_expression "(uVar13 < uVar10 + 1)" ( (binary_expression "uVar13 < uVar10 + 1" identifier < (binary_expression "uVar10 + 1" identifier + number_literal)) )) (compound_statement "{\n              puVar12 = haystack + lVar14;\n              goto LAB_00124906;\n            }" { (expression_statement "puVar12 = haystack + lVar14;" (assignment_expression "puVar12 = haystack + lVar14" identifier = (binary_expression "haystack + lVar14" identifier + identifier)) ;) (goto_statement "goto LAB_00124906;" goto statement_identifier ;) })) (expression_statement "lVar14 = lVar14 + sVar1;" (assignment_expression "lVar14 = lVar14 + sVar1" identifier = (binary_expression "lVar14 + sVar1" identifier + identifier)) ;) (expression_statement "uVar10 = needle_len - sVar1;" (assignment_expression "uVar10 = needle_len - sVar1" identifier = (binary_expression "needle_len - sVar1" identifier - identifier)) ;) (goto_statement "goto LAB_00124981;" goto statement_identifier ;) })) (if_statement "if (needle[uVar13] == haystack[uVar13 + lVar14]) {\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }" if (parenthesized_expression "(needle[uVar13] == haystack[uVar13 + lVar14])" ( (binary_expression "needle[uVar13] == haystack[uVar13 + lVar14]" (subscript_expression "needle[uVar13]" identifier [ identifier ]) == (subscript_expression "haystack[uVar13 + lVar14]" identifier [ (binary_expression "uVar13 + lVar14" identifier + identifier) ])) )) (compound_statement "{\n            do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);\n          }" { (do_statement "do {\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            } while (needle[uVar13] == haystack[uVar13 + lVar14]);" do (compound_statement "{\n              uVar13 = uVar13 + 1;\n              if (uVar13 == uVar16) goto LAB_00124a14;\n            }" { (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (if_statement "if (uVar13 == uVar16) goto LAB_00124a14;" if (parenthesized_expression "(uVar13 == uVar16)" ( (binary_expression "uVar13 == uVar16" identifier == identifier) )) (goto_statement "goto LAB_00124a14;" goto statement_identifier ;)) }) while (parenthesized_expression "(needle[uVar13] == haystack[uVar13 + lVar14])" ( (binary_expression "needle[uVar13] == haystack[uVar13 + lVar14]" (subscript_expression "needle[uVar13]" identifier [ identifier ]) == (subscript_expression "haystack[uVar13 + lVar14]" identifier [ (binary_expression "uVar13 + lVar14" identifier + identifier) ])) )) ;) })) (expression_statement "lVar14 = lVar14 + (1 - __n);" (assignment_expression "lVar14 = lVar14 + (1 - __n)" identifier = (binary_expression "lVar14 + (1 - __n)" identifier + (parenthesized_expression "(1 - __n)" ( (binary_expression "1 - __n" number_literal - identifier) )))) ;) }) (else_clause "else if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }" else (if_statement "if ((uVar13 < sVar1) && (uVar10 != 0)) {\n          uVar13 = needle_len - sVar1;\n        }" if (parenthesized_expression "((uVar13 < sVar1) && (uVar10 != 0))" ( (binary_expression "(uVar13 < sVar1) && (uVar10 != 0)" (parenthesized_expression "(uVar13 < sVar1)" ( (binary_expression "uVar13 < sVar1" identifier < identifier) )) && (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) ))) )) (compound_statement "{\n          uVar13 = needle_len - sVar1;\n        }" { (expression_statement "uVar13 = needle_len - sVar1;" (assignment_expression "uVar13 = needle_len - sVar1" identifier = (binary_expression "needle_len - sVar1" identifier - identifier)) ;) })))) (expression_statement "lVar14 = lVar14 + uVar13;" (assignment_expression "lVar14 = lVar14 + uVar13" identifier = (binary_expression "lVar14 + uVar13" identifier + identifier)) ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })) }))) (expression_statement "uVar8 = needle_len - __n;" (assignment_expression "uVar8 = needle_len - __n" identifier = (binary_expression "needle_len - __n" identifier - identifier)) ;) (if_statement "if (needle_len - __n < __n) {\n    uVar8 = __n;\n  }" if (parenthesized_expression "(needle_len - __n < __n)" ( (binary_expression "needle_len - __n < __n" (binary_expression "needle_len - __n" identifier - identifier) < identifier) )) (compound_statement "{\n    uVar8 = __n;\n  }" { (expression_statement "uVar8 = __n;" (assignment_expression "uVar8 = __n" identifier = identifier) ;) })) (expression_statement "lVar15 = 0;" (assignment_expression "lVar15 = 0" identifier = number_literal) ;) (expression_statement "lVar14 = __n - 1;" (assignment_expression "lVar14 = __n - 1" identifier = (binary_expression "__n - 1" identifier - number_literal)) ;) (labeled_statement "LAB_00124826:\n  do {\n    sVar1 = lVar15 + needle_len;\n    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);\n    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;\n    uVar10 = shift_table[haystack[sVar1 - 1]];\n    haystack_len = sVar1;\n    if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }\n    lVar15 = lVar15 + uVar10;\n  } while( true );" statement_identifier : (do_statement "do {\n    sVar1 = lVar15 + needle_len;\n    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);\n    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;\n    uVar10 = shift_table[haystack[sVar1 - 1]];\n    haystack_len = sVar1;\n    if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }\n    lVar15 = lVar15 + uVar10;\n  } while( true );" do (compound_statement "{\n    sVar1 = lVar15 + needle_len;\n    pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);\n    if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;\n    uVar10 = shift_table[haystack[sVar1 - 1]];\n    haystack_len = sVar1;\n    if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }\n    lVar15 = lVar15 + uVar10;\n  }" { (expression_statement "sVar1 = lVar15 + needle_len;" (assignment_expression "sVar1 = lVar15 + needle_len" identifier = (binary_expression "lVar15 + needle_len" identifier + identifier)) ;) (expression_statement "pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len);" (assignment_expression "pvVar9 = memchr(haystack + haystack_len,0,sVar1 - haystack_len)" identifier = (call_expression "memchr(haystack + haystack_len,0,sVar1 - haystack_len)" identifier (argument_list "(haystack + haystack_len,0,sVar1 - haystack_len)" ( (binary_expression "haystack + haystack_len" identifier + identifier) , number_literal , (binary_expression "sVar1 - haystack_len" identifier - identifier) )))) ;) (if_statement "if ((pvVar9 != (void *)0x0) || (sVar1 == 0)) goto LAB_00124904;" if (parenthesized_expression "((pvVar9 != (void *)0x0) || (sVar1 == 0))" ( (binary_expression "(pvVar9 != (void *)0x0) || (sVar1 == 0)" (parenthesized_expression "(pvVar9 != (void *)0x0)" ( (binary_expression "pvVar9 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(sVar1 == 0)" ( (binary_expression "sVar1 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_00124904;" goto statement_identifier ;)) (expression_statement "uVar10 = shift_table[haystack[sVar1 - 1]];" (assignment_expression "uVar10 = shift_table[haystack[sVar1 - 1]]" identifier = (subscript_expression "shift_table[haystack[sVar1 - 1]]" identifier [ (subscript_expression "haystack[sVar1 - 1]" identifier [ (binary_expression "sVar1 - 1" identifier - number_literal) ]) ])) ;) (expression_statement "haystack_len = sVar1;" (assignment_expression "haystack_len = sVar1" identifier = identifier) ;) (if_statement "if (uVar10 == 0) {\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      puVar12 = haystack + lVar15;\n      if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }\n      uVar10 = __n;\n      if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }\n      lVar15 = lVar15 + (1 - __n);\n    }" { (expression_statement "puVar12 = haystack + lVar15;" (assignment_expression "puVar12 = haystack + lVar15" identifier = (binary_expression "haystack + lVar15" identifier + identifier)) ;) (if_statement "if (uVar16 <= __n) {\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }" if (parenthesized_expression "(uVar16 <= __n)" ( (binary_expression "uVar16 <= __n" identifier <= identifier) )) (compound_statement "{\nLAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;\n        lVar11 = lVar14;\n        if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }\n        lVar15 = lVar15 + uVar8 + 1;\n        goto LAB_00124826;\n      }" { (labeled_statement "LAB_001248a3:\n        if (lVar14 == -1) goto LAB_00124906;" statement_identifier : (if_statement "if (lVar14 == -1) goto LAB_00124906;" if (parenthesized_expression "(lVar14 == -1)" ( (binary_expression "lVar14 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00124906;" goto statement_identifier ;))) (expression_statement "lVar11 = lVar14;" (assignment_expression "lVar11 = lVar14" identifier = identifier) ;) (if_statement "if (puVar12[lVar14] == needle[lVar14]) {\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }" if (parenthesized_expression "(puVar12[lVar14] == needle[lVar14])" ( (binary_expression "puVar12[lVar14] == needle[lVar14]" (subscript_expression "puVar12[lVar14]" identifier [ identifier ]) == (subscript_expression "needle[lVar14]" identifier [ identifier ])) )) (compound_statement "{\n          do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);\n        }" { (do_statement "do {\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          } while (needle[lVar11] == puVar12[lVar11]);" do (compound_statement "{\n            lVar11 = lVar11 + -1;\n            if (lVar11 == -1) goto LAB_00124906;\n          }" { (expression_statement "lVar11 = lVar11 + -1;" (assignment_expression "lVar11 = lVar11 + -1" identifier = (binary_expression "lVar11 + -1" identifier + number_literal)) ;) (if_statement "if (lVar11 == -1) goto LAB_00124906;" if (parenthesized_expression "(lVar11 == -1)" ( (binary_expression "lVar11 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00124906;" goto statement_identifier ;)) }) while (parenthesized_expression "(needle[lVar11] == puVar12[lVar11])" ( (binary_expression "needle[lVar11] == puVar12[lVar11]" (subscript_expression "needle[lVar11]" identifier [ identifier ]) == (subscript_expression "puVar12[lVar11]" identifier [ identifier ])) )) ;) })) (expression_statement "lVar15 = lVar15 + uVar8 + 1;" (assignment_expression "lVar15 = lVar15 + uVar8 + 1" identifier = (binary_expression "lVar15 + uVar8 + 1" (binary_expression "lVar15 + uVar8" identifier + identifier) + number_literal)) ;) (goto_statement "goto LAB_00124826;" goto statement_identifier ;) })) (expression_statement "uVar10 = __n;" (assignment_expression "uVar10 = __n" identifier = identifier) ;) (if_statement "if (puVar12[__n] == needle[__n]) {\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }" if (parenthesized_expression "(puVar12[__n] == needle[__n])" ( (binary_expression "puVar12[__n] == needle[__n]" (subscript_expression "puVar12[__n]" identifier [ identifier ]) == (subscript_expression "needle[__n]" identifier [ identifier ])) )) (compound_statement "{\n        do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);\n      }" { (do_statement "do {\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        } while (needle[uVar10] == puVar12[uVar10]);" do (compound_statement "{\n          uVar10 = uVar10 + 1;\n          if (uVar16 <= uVar10) goto LAB_001248a3;\n        }" { (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;) (if_statement "if (uVar16 <= uVar10) goto LAB_001248a3;" if (parenthesized_expression "(uVar16 <= uVar10)" ( (binary_expression "uVar16 <= uVar10" identifier <= identifier) )) (goto_statement "goto LAB_001248a3;" goto statement_identifier ;)) }) while (parenthesized_expression "(needle[uVar10] == puVar12[uVar10])" ( (binary_expression "needle[uVar10] == puVar12[uVar10]" (subscript_expression "needle[uVar10]" identifier [ identifier ]) == (subscript_expression "puVar12[uVar10]" identifier [ identifier ])) )) ;) })) (expression_statement "lVar15 = lVar15 + (1 - __n);" (assignment_expression "lVar15 = lVar15 + (1 - __n)" identifier = (binary_expression "lVar15 + (1 - __n)" identifier + (parenthesized_expression "(1 - __n)" ( (binary_expression "1 - __n" number_literal - identifier) )))) ;) })) (expression_statement "lVar15 = lVar15 + uVar10;" (assignment_expression "lVar15 = lVar15 + uVar10" identifier = (binary_expression "lVar15 + uVar10" identifier + identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "long FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)\n\n{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}\n\n" (function_definition "long FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)\n\n{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)" identifier (parameter_list "(long param_1,long param_2,byte *param_3,ulong param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "byte *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "ulong *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "long lVar12;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar14;" type_identifier identifier ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_850;" type_identifier identifier ;) (declaration "ulong local_848 [257];" type_identifier (array_declarator "local_848 [257]" identifier [ number_literal ]) ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" if (parenthesized_expression "(param_4 < 3)" ( (binary_expression "param_4 < 3" identifier < number_literal) )) (compound_statement "{\n    local_850 = 1;\n    __n = param_4 - 1;\n  }" { (expression_statement "local_850 = 1;" (assignment_expression "local_850 = 1" identifier = number_literal) ;) (expression_statement "__n = param_4 - 1;" (assignment_expression "__n = param_4 - 1" identifier = (binary_expression "param_4 - 1" identifier - number_literal)) ;) }) (else_clause "else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" else (compound_statement "{\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" { (expression_statement "__n = FUN_001245c0(param_3,param_4,&local_850);" (assignment_expression "__n = FUN_001245c0(param_3,param_4,&local_850)" identifier = (call_expression "FUN_001245c0(param_3,param_4,&local_850)" identifier (argument_list "(param_3,param_4,&local_850)" ( identifier , identifier , (pointer_expression "&local_850" & identifier) )))) ;) }))) (expression_statement "uVar7 = local_850;" (assignment_expression "uVar7 = local_850" identifier = identifier) ;) (expression_statement "puVar5 = local_848;" (assignment_expression "puVar5 = local_848" identifier = identifier) ;) (do_statement "do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);" do (compound_statement "{\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  }" { (expression_statement "*puVar5 = param_4;" (assignment_expression "*puVar5 = param_4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "puVar5[1] = param_4;" (assignment_expression "puVar5[1] = param_4" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5 = puVar5 + 2;" (assignment_expression "puVar5 = puVar5 + 2" identifier = (binary_expression "puVar5 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_848 + 0x100 != puVar5)" ( (binary_expression "local_848 + 0x100 != puVar5" (binary_expression "local_848 + 0x100" identifier + number_literal) != identifier) )) ;) (if_statement "if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }" { (expression_statement "uVar15 = 0xffffffffffffffff;" (assignment_expression "uVar15 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "iVar4 = memcmp(param_3,param_3 + local_850,__n);" (assignment_expression "iVar4 = memcmp(param_3,param_3 + local_850,__n)" identifier = (call_expression "memcmp(param_3,param_3 + local_850,__n)" identifier (argument_list "(param_3,param_3 + local_850,__n)" ( identifier , (binary_expression "param_3 + local_850" identifier + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }" { (labeled_statement "LAB_00124904:\n      lVar12 = 0;" statement_identifier : (expression_statement "lVar12 = 0;" (assignment_expression "lVar12 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }" statement_identifier : (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n        __stack_chk_fail();\n      }" { (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return lVar12;" return identifier ;) })) }) (else_clause "else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" else (compound_statement "{\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" { (expression_statement "uVar15 = param_4 - 1;" (assignment_expression "uVar15 = param_4 - 1" identifier = (binary_expression "param_4 - 1" identifier - number_literal)) ;) (expression_statement "pbVar6 = param_3;" (assignment_expression "pbVar6 = param_3" identifier = identifier) ;) (do_statement "do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);" do (compound_statement "{\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    }" { (expression_statement "bVar2 = *pbVar6;" (assignment_expression "bVar2 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "lVar12 = uVar15 - (long)pbVar6;" (assignment_expression "lVar12 = uVar15 - (long)pbVar6" identifier = (binary_expression "uVar15 - (long)pbVar6" identifier - (cast_expression "(long)pbVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "pbVar6 = pbVar6 + 1;" (assignment_expression "pbVar6 = pbVar6 + 1" identifier = (binary_expression "pbVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_848[bVar2] = (ulong)(param_3 + lVar12);" (assignment_expression "local_848[bVar2] = (ulong)(param_3 + lVar12)" (subscript_expression "local_848[bVar2]" identifier [ identifier ]) = (call_expression "(ulong)(param_3 + lVar12)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 + lVar12)" ( (binary_expression "param_3 + lVar12" identifier + identifier) )))) ;) }) while (parenthesized_expression "(param_3 + param_4 != pbVar6)" ( (binary_expression "param_3 + param_4 != pbVar6" (binary_expression "param_3 + param_4" identifier + identifier) != identifier) )) ;) (expression_statement "iVar4 = memcmp(param_3,param_3 + local_850,__n);" (assignment_expression "iVar4 = memcmp(param_3,param_3 + local_850,__n)" identifier = (call_expression "memcmp(param_3,param_3 + local_850,__n)" identifier (argument_list "(param_3,param_3 + local_850,__n)" ( identifier , (binary_expression "param_3 + local_850" identifier + identifier) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }" { (expression_statement "uVar9 = __n - 1;" (assignment_expression "uVar9 = __n - 1" identifier = (binary_expression "__n - 1" identifier - number_literal)) ;) (expression_statement "lVar12 = 0;" (assignment_expression "lVar12 = 0" identifier = number_literal) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (labeled_statement "LAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );" statement_identifier : (do_statement "do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );" do (compound_statement "{\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      }" { (expression_statement "lVar1 = lVar12 + param_4;" (assignment_expression "lVar1 = lVar12 + param_4" identifier = (binary_expression "lVar12 + param_4" identifier + identifier)) ;) (expression_statement "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);" (assignment_expression "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2)" identifier = (call_expression "memchr((void *)(param_1 + param_2),0,lVar1 - param_2)" identifier (argument_list "((void *)(param_1 + param_2),0,lVar1 - param_2)" ( (cast_expression "(void *)(param_1 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_2)" ( (binary_expression "param_1 + param_2" identifier + identifier) ))) , number_literal , (binary_expression "lVar1 - param_2" identifier - identifier) )))) ;) (if_statement "if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;" if (parenthesized_expression "((pvVar8 != (void *)0x0) || (lVar1 == 0))" ( (binary_expression "(pvVar8 != (void *)0x0) || (lVar1 == 0)" (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_00124904;" goto statement_identifier ;)) (expression_statement "uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];" (assignment_expression "uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)]" identifier = (subscript_expression "local_848[*(byte *)(param_1 + -1 + lVar1)]" identifier [ (pointer_expression "*(byte *)(param_1 + -1 + lVar1)" * (cast_expression "(byte *)(param_1 + -1 + lVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -1 + lVar1)" ( (binary_expression "param_1 + -1 + lVar1" (binary_expression "param_1 + -1" identifier + number_literal) + identifier) )))) ])) ;) (expression_statement "param_2 = lVar1;" (assignment_expression "param_2 = lVar1" identifier = identifier) ;) (if_statement "if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }" { (expression_statement "uVar11 = __n;" (assignment_expression "uVar11 = __n" identifier = identifier) ;) (if_statement "if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }" if (parenthesized_expression "(__n <= uVar14)" ( (binary_expression "__n <= uVar14" identifier <= identifier) )) (compound_statement "{\n            uVar11 = uVar14;\n          }" { (expression_statement "uVar11 = uVar14;" (assignment_expression "uVar11 = uVar14" identifier = identifier) ;) })) (if_statement "if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }" if (parenthesized_expression "(uVar15 <= uVar11)" ( (binary_expression "uVar15 <= uVar11" identifier <= identifier) )) (compound_statement "{\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }" { (labeled_statement "LAB_00124a14:\n            uVar11 = __n;" statement_identifier : (expression_statement "uVar11 = __n;" (assignment_expression "uVar11 = __n" identifier = identifier) ;)) (if_statement "if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }" if (parenthesized_expression "((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)))" ( (binary_expression "(uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))" (parenthesized_expression "(uVar14 < __n)" ( (binary_expression "uVar14 < __n" identifier < identifier) )) && (parenthesized_expression "(uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))" ( (comma_expression "uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)" (assignment_expression "uVar3 = uVar9" identifier = identifier) , (binary_expression "param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)" (subscript_expression "param_3[uVar9]" identifier [ identifier ]) == (pointer_expression "*(byte *)(param_1 + lVar12 + uVar9)" * (cast_expression "(byte *)(param_1 + lVar12 + uVar9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar12 + uVar9)" ( (binary_expression "param_1 + lVar12 + uVar9" (binary_expression "param_1 + lVar12" identifier + identifier) + identifier) )))))) ))) )) (compound_statement "{\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }" { (do_statement "do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));" do (compound_statement "{\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              }" { (expression_statement "uVar11 = uVar3;" (assignment_expression "uVar11 = uVar3" identifier = identifier) ;) (if_statement "if (uVar14 == uVar11) break;" if (parenthesized_expression "(uVar14 == uVar11)" ( (binary_expression "uVar14 == uVar11" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = uVar11 - 1;" (assignment_expression "uVar3 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12))" ( (binary_expression "param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12)" (subscript_expression "param_3[uVar11 - 1]" identifier [ (binary_expression "uVar11 - 1" identifier - number_literal) ]) == (pointer_expression "*(byte *)((uVar11 - 1) + param_1 + lVar12)" * (cast_expression "(byte *)((uVar11 - 1) + param_1 + lVar12)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar11 - 1) + param_1 + lVar12)" ( (binary_expression "(uVar11 - 1) + param_1 + lVar12" (binary_expression "(uVar11 - 1) + param_1" (parenthesized_expression "(uVar11 - 1)" ( (binary_expression "uVar11 - 1" identifier - number_literal) )) + identifier) + identifier) ))))) )) ;) })) (if_statement "if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }" if (parenthesized_expression "(uVar11 < uVar14 + 1)" ( (binary_expression "uVar11 < uVar14 + 1" identifier < (binary_expression "uVar14 + 1" identifier + number_literal)) )) (compound_statement "{\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }" { (expression_statement "lVar12 = param_1 + lVar12;" (assignment_expression "lVar12 = param_1 + lVar12" identifier = (binary_expression "param_1 + lVar12" identifier + identifier)) ;) (goto_statement "goto LAB_00124906;" goto statement_identifier ;) })) (expression_statement "lVar12 = lVar12 + uVar7;" (assignment_expression "lVar12 = lVar12 + uVar7" identifier = (binary_expression "lVar12 + uVar7" identifier + identifier)) ;) (expression_statement "uVar14 = param_4 - uVar7;" (assignment_expression "uVar14 = param_4 - uVar7" identifier = (binary_expression "param_4 - uVar7" identifier - identifier)) ;) (goto_statement "goto LAB_00124981;" goto statement_identifier ;) })) (if_statement "if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }" if (parenthesized_expression "(param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11))" ( (binary_expression "param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)" (subscript_expression "param_3[uVar11]" identifier [ identifier ]) == (pointer_expression "*(byte *)(param_1 + lVar12 + uVar11)" * (cast_expression "(byte *)(param_1 + lVar12 + uVar11)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar12 + uVar11)" ( (binary_expression "param_1 + lVar12 + uVar11" (binary_expression "param_1 + lVar12" identifier + identifier) + identifier) ))))) )) (compound_statement "{\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }" { (do_statement "do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));" do (compound_statement "{\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            }" { (expression_statement "uVar11 = uVar11 + 1;" (assignment_expression "uVar11 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) ;) (if_statement "if (uVar11 == uVar15) goto LAB_00124a14;" if (parenthesized_expression "(uVar11 == uVar15)" ( (binary_expression "uVar11 == uVar15" identifier == identifier) )) (goto_statement "goto LAB_00124a14;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11))" ( (binary_expression "param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)" (subscript_expression "param_3[uVar11]" identifier [ identifier ]) == (pointer_expression "*(byte *)(param_1 + lVar12 + uVar11)" * (cast_expression "(byte *)(param_1 + lVar12 + uVar11)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + lVar12 + uVar11)" ( (binary_expression "param_1 + lVar12 + uVar11" (binary_expression "param_1 + lVar12" identifier + identifier) + identifier) ))))) )) ;) })) (expression_statement "lVar12 = lVar12 + (1 - __n);" (assignment_expression "lVar12 = lVar12 + (1 - __n)" identifier = (binary_expression "lVar12 + (1 - __n)" identifier + (parenthesized_expression "(1 - __n)" ( (binary_expression "1 - __n" number_literal - identifier) )))) ;) }) (else_clause "else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" else (if_statement "if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" if (parenthesized_expression "((uVar11 < uVar7) && (uVar14 != 0))" ( (binary_expression "(uVar11 < uVar7) && (uVar14 != 0)" (parenthesized_expression "(uVar11 < uVar7)" ( (binary_expression "uVar11 < uVar7" identifier < identifier) )) && (parenthesized_expression "(uVar14 != 0)" ( (binary_expression "uVar14 != 0" identifier != number_literal) ))) )) (compound_statement "{\n          uVar11 = param_4 - uVar7;\n        }" { (expression_statement "uVar11 = param_4 - uVar7;" (assignment_expression "uVar11 = param_4 - uVar7" identifier = (binary_expression "param_4 - uVar7" identifier - identifier)) ;) })))) (expression_statement "lVar12 = lVar12 + uVar11;" (assignment_expression "lVar12 = lVar12 + uVar11" identifier = (binary_expression "lVar12 + uVar11" identifier + identifier)) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })) }))) (expression_statement "uVar7 = param_4 - __n;" (assignment_expression "uVar7 = param_4 - __n" identifier = (binary_expression "param_4 - __n" identifier - identifier)) ;) (if_statement "if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }" if (parenthesized_expression "(param_4 - __n < __n)" ( (binary_expression "param_4 - __n < __n" (binary_expression "param_4 - __n" identifier - identifier) < identifier) )) (compound_statement "{\n    uVar7 = __n;\n  }" { (expression_statement "uVar7 = __n;" (assignment_expression "uVar7 = __n" identifier = identifier) ;) })) (expression_statement "lVar13 = 0;" (assignment_expression "lVar13 = 0" identifier = number_literal) ;) (expression_statement "lVar1 = __n - 1;" (assignment_expression "lVar1 = __n - 1" identifier = (binary_expression "__n - 1" identifier - number_literal)) ;) (labeled_statement "LAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );" statement_identifier : (do_statement "do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );" do (compound_statement "{\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  }" { (expression_statement "lVar12 = lVar13 + param_4;" (assignment_expression "lVar12 = lVar13 + param_4" identifier = (binary_expression "lVar13 + param_4" identifier + identifier)) ;) (expression_statement "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);" (assignment_expression "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2)" identifier = (call_expression "memchr((void *)(param_1 + param_2),0,lVar12 - param_2)" identifier (argument_list "((void *)(param_1 + param_2),0,lVar12 - param_2)" ( (cast_expression "(void *)(param_1 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + param_2)" ( (binary_expression "param_1 + param_2" identifier + identifier) ))) , number_literal , (binary_expression "lVar12 - param_2" identifier - identifier) )))) ;) (if_statement "if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;" if (parenthesized_expression "((pvVar8 != (void *)0x0) || (lVar12 == 0))" ( (binary_expression "(pvVar8 != (void *)0x0) || (lVar12 == 0)" (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(lVar12 == 0)" ( (binary_expression "lVar12 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_00124904;" goto statement_identifier ;)) (expression_statement "uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];" (assignment_expression "uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)]" identifier = (subscript_expression "local_848[*(byte *)(param_1 + -1 + lVar12)]" identifier [ (pointer_expression "*(byte *)(param_1 + -1 + lVar12)" * (cast_expression "(byte *)(param_1 + -1 + lVar12)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -1 + lVar12)" ( (binary_expression "param_1 + -1 + lVar12" (binary_expression "param_1 + -1" identifier + number_literal) + identifier) )))) ])) ;) (expression_statement "param_2 = lVar12;" (assignment_expression "param_2 = lVar12" identifier = identifier) ;) (if_statement "if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }" if (parenthesized_expression "(uVar9 == 0)" ( (binary_expression "uVar9 == 0" identifier == number_literal) )) (compound_statement "{\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }" { (expression_statement "lVar12 = param_1 + lVar13;" (assignment_expression "lVar12 = param_1 + lVar13" identifier = (binary_expression "param_1 + lVar13" identifier + identifier)) ;) (if_statement "if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }" if (parenthesized_expression "(uVar15 <= __n)" ( (binary_expression "uVar15 <= __n" identifier <= identifier) )) (compound_statement "{\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }" { (labeled_statement "LAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;" statement_identifier : (if_statement "if (lVar1 == -1) goto LAB_00124906;" if (parenthesized_expression "(lVar1 == -1)" ( (binary_expression "lVar1 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00124906;" goto statement_identifier ;))) (expression_statement "lVar10 = lVar1;" (assignment_expression "lVar10 = lVar1" identifier = identifier) ;) (if_statement "if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }" if (parenthesized_expression "(*(byte *)(lVar12 + lVar1) == param_3[lVar1])" ( (binary_expression "*(byte *)(lVar12 + lVar1) == param_3[lVar1]" (pointer_expression "*(byte *)(lVar12 + lVar1)" * (cast_expression "(byte *)(lVar12 + lVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + lVar1)" ( (binary_expression "lVar12 + lVar1" identifier + identifier) )))) == (subscript_expression "param_3[lVar1]" identifier [ identifier ])) )) (compound_statement "{\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }" { (do_statement "do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));" do (compound_statement "{\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          }" { (expression_statement "lVar10 = lVar10 + -1;" (assignment_expression "lVar10 = lVar10 + -1" identifier = (binary_expression "lVar10 + -1" identifier + number_literal)) ;) (if_statement "if (lVar10 == -1) goto LAB_00124906;" if (parenthesized_expression "(lVar10 == -1)" ( (binary_expression "lVar10 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00124906;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_3[lVar10] == *(byte *)(lVar12 + lVar10))" ( (binary_expression "param_3[lVar10] == *(byte *)(lVar12 + lVar10)" (subscript_expression "param_3[lVar10]" identifier [ identifier ]) == (pointer_expression "*(byte *)(lVar12 + lVar10)" * (cast_expression "(byte *)(lVar12 + lVar10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + lVar10)" ( (binary_expression "lVar12 + lVar10" identifier + identifier) ))))) )) ;) })) (expression_statement "lVar13 = lVar13 + uVar7 + 1;" (assignment_expression "lVar13 = lVar13 + uVar7 + 1" identifier = (binary_expression "lVar13 + uVar7 + 1" (binary_expression "lVar13 + uVar7" identifier + identifier) + number_literal)) ;) (goto_statement "goto LAB_00124826;" goto statement_identifier ;) })) (expression_statement "uVar9 = __n;" (assignment_expression "uVar9 = __n" identifier = identifier) ;) (if_statement "if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }" if (parenthesized_expression "(*(byte *)(lVar12 + __n) == param_3[__n])" ( (binary_expression "*(byte *)(lVar12 + __n) == param_3[__n]" (pointer_expression "*(byte *)(lVar12 + __n)" * (cast_expression "(byte *)(lVar12 + __n)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + __n)" ( (binary_expression "lVar12 + __n" identifier + identifier) )))) == (subscript_expression "param_3[__n]" identifier [ identifier ])) )) (compound_statement "{\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }" { (do_statement "do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));" do (compound_statement "{\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        }" { (expression_statement "uVar9 = uVar9 + 1;" (assignment_expression "uVar9 = uVar9 + 1" identifier = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (if_statement "if (uVar15 <= uVar9) goto LAB_001248a3;" if (parenthesized_expression "(uVar15 <= uVar9)" ( (binary_expression "uVar15 <= uVar9" identifier <= identifier) )) (goto_statement "goto LAB_001248a3;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_3[uVar9] == *(byte *)(lVar12 + uVar9))" ( (binary_expression "param_3[uVar9] == *(byte *)(lVar12 + uVar9)" (subscript_expression "param_3[uVar9]" identifier [ identifier ]) == (pointer_expression "*(byte *)(lVar12 + uVar9)" * (cast_expression "(byte *)(lVar12 + uVar9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + uVar9)" ( (binary_expression "lVar12 + uVar9" identifier + identifier) ))))) )) ;) })) (expression_statement "lVar13 = lVar13 + (1 - __n);" (assignment_expression "lVar13 = lVar13 + (1 - __n)" identifier = (binary_expression "lVar13 + (1 - __n)" identifier + (parenthesized_expression "(1 - __n)" ( (binary_expression "1 - __n" number_literal - identifier) )))) ;) })) (expression_statement "lVar13 = lVar13 + uVar9;" (assignment_expression "lVar13 = lVar13 + uVar9" identifier = (binary_expression "lVar13 + uVar9" identifier + identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) )))) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + IDENT) )))) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) , LIT , (binary_expression IDENT - IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (subscript_expression IDENT [ IDENT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + IDENT) )))))) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression IDENT - LIT) ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + IDENT) + IDENT) ))))) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + IDENT) ))))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + IDENT) ))))) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression LIT - IDENT) )))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) while (parenthesized_expression ( BOOL )) ;)) })) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) , LIT , (binary_expression IDENT - IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) == (subscript_expression IDENT [ IDENT ])) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) == (subscript_expression IDENT [ IDENT ])) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression LIT - IDENT) )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( BOOL )) ;)) })))
(function_definition "long FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)\n\n{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00124710(long param_1,long param_2,byte *param_3,ulong param_4)" (identifier "FUN_00124710") (parameter_list "(long param_1,long param_2,byte *param_3,ulong param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "byte *param_3" (type_identifier "byte") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) () ")"))) (compound_statement "{\n  long lVar1;\n  byte bVar2;\n  ulong uVar3;\n  int iVar4;\n  ulong __n;\n  ulong *puVar5;\n  byte *pbVar6;\n  ulong uVar7;\n  void *pvVar8;\n  ulong uVar9;\n  long lVar10;\n  ulong uVar11;\n  long lVar12;\n  long lVar13;\n  ulong uVar14;\n  ulong uVar15;\n  long in_FS_OFFSET;\n  ulong local_850;\n  ulong local_848 [257];\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }\n  uVar7 = local_850;\n  puVar5 = local_848;\n  do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);\n  if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }\n  uVar7 = param_4 - __n;\n  if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }\n  lVar13 = 0;\n  lVar1 = __n - 1;\nLAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "ulong __n;" (type_identifier "ulong") (identifier "__n") (; ";")) (declaration "ulong *puVar5;" (type_identifier "ulong") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "void *pvVar8;" (primitive_type "void") (pointer_declarator "*pvVar8" (* "*") (identifier "pvVar8")) (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (declaration "long lVar10;" (sized_type_specifier "long" (long "long")) (identifier "lVar10") (; ";")) (declaration "ulong uVar11;" (type_identifier "ulong") (identifier "uVar11") (; ";")) (declaration "long lVar12;" (sized_type_specifier "long" (long "long")) (identifier "lVar12") (; ";")) (declaration "long lVar13;" (sized_type_specifier "long" (long "long")) (identifier "lVar13") (; ";")) (declaration "ulong uVar14;" (type_identifier "ulong") (identifier "uVar14") (; ";")) (declaration "ulong uVar15;" (type_identifier "ulong") (identifier "uVar15") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "ulong local_850;" (type_identifier "ulong") (identifier "local_850") (; ";")) (declaration "ulong local_848 [257];" (type_identifier "ulong") (array_declarator "local_848 [257]" (identifier "local_848") ([ "[") (number_literal "257") (] "]")) (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (param_4 < 3) {\n    local_850 = 1;\n    __n = param_4 - 1;\n  }\n  else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" (if "if") (parenthesized_expression "(param_4 < 3)" (( "(") (binary_expression "param_4 < 3" (identifier "param_4") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n    local_850 = 1;\n    __n = param_4 - 1;\n  }" ({ "{") (expression_statement "local_850 = 1;" (assignment_expression "local_850 = 1" (identifier "local_850") (= "=") (number_literal "1")) (; ";")) (expression_statement "__n = param_4 - 1;" (assignment_expression "__n = param_4 - 1" (identifier "__n") (= "=") (binary_expression "param_4 - 1" (identifier "param_4") (- "-") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" (else "else") (compound_statement "{\n    __n = FUN_001245c0(param_3,param_4,&local_850);\n  }" ({ "{") (expression_statement "__n = FUN_001245c0(param_3,param_4,&local_850);" (assignment_expression "__n = FUN_001245c0(param_3,param_4,&local_850)" (identifier "__n") (= "=") (call_expression "FUN_001245c0(param_3,param_4,&local_850)" (identifier "FUN_001245c0") (argument_list "(param_3,param_4,&local_850)" (( "(") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (pointer_expression "&local_850" (& "&") (identifier "local_850")) () ")")))) (; ";")) (} "}")))) (expression_statement "uVar7 = local_850;" (assignment_expression "uVar7 = local_850" (identifier "uVar7") (= "=") (identifier "local_850")) (; ";")) (expression_statement "puVar5 = local_848;" (assignment_expression "puVar5 = local_848" (identifier "puVar5") (= "=") (identifier "local_848")) (; ";")) (do_statement "do {\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  } while (local_848 + 0x100 != puVar5);" (do "do") (compound_statement "{\n    *puVar5 = param_4;\n    puVar5[1] = param_4;\n    puVar5 = puVar5 + 2;\n  }" ({ "{") (expression_statement "*puVar5 = param_4;" (assignment_expression "*puVar5 = param_4" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "param_4")) (; ";")) (expression_statement "puVar5[1] = param_4;" (assignment_expression "puVar5[1] = param_4" (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_4")) (; ";")) (expression_statement "puVar5 = puVar5 + 2;" (assignment_expression "puVar5 = puVar5 + 2" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 2" (identifier "puVar5") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_848 + 0x100 != puVar5)" (( "(") (binary_expression "local_848 + 0x100 != puVar5" (binary_expression "local_848 + 0x100" (identifier "local_848") (+ "+") (number_literal "0x100")) (!= "!=") (identifier "puVar5")) () ")")) (; ";")) (if_statement "if (param_4 == 0) {\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }\n  else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar15 = 0xffffffffffffffff;\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }\n  }" ({ "{") (expression_statement "uVar15 = 0xffffffffffffffff;" (assignment_expression "uVar15 = 0xffffffffffffffff" (identifier "uVar15") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (expression_statement "iVar4 = memcmp(param_3,param_3 + local_850,__n);" (assignment_expression "iVar4 = memcmp(param_3,param_3 + local_850,__n)" (identifier "iVar4") (= "=") (call_expression "memcmp(param_3,param_3 + local_850,__n)" (identifier "memcmp") (argument_list "(param_3,param_3 + local_850,__n)" (( "(") (identifier "param_3") (, ",") (binary_expression "param_3 + local_850" (identifier "param_3") (+ "+") (identifier "local_850")) (, ",") (identifier "__n") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00124904:\n      lVar12 = 0;\nLAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }\n      return lVar12;\n    }" ({ "{") (labeled_statement "LAB_00124904:\n      lVar12 = 0;" (statement_identifier "LAB_00124904") (: ":") (expression_statement "lVar12 = 0;" (assignment_expression "lVar12 = 0" (identifier "lVar12") (= "=") (number_literal "0")) (; ";"))) (labeled_statement "LAB_00124906:\n      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }" (statement_identifier "LAB_00124906") (: ":") (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n        __stack_chk_fail();\n      }" (if "if") (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (!= "!=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n                    \n        __stack_chk_fail();\n      }" ({ "{") (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return lVar12;" (return "return") (identifier "lVar12") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" (else "else") (compound_statement "{\n    uVar15 = param_4 - 1;\n    pbVar6 = param_3;\n    do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);\n    iVar4 = memcmp(param_3,param_3 + local_850,__n);\n    if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }\n  }" ({ "{") (expression_statement "uVar15 = param_4 - 1;" (assignment_expression "uVar15 = param_4 - 1" (identifier "uVar15") (= "=") (binary_expression "param_4 - 1" (identifier "param_4") (- "-") (number_literal "1"))) (; ";")) (expression_statement "pbVar6 = param_3;" (assignment_expression "pbVar6 = param_3" (identifier "pbVar6") (= "=") (identifier "param_3")) (; ";")) (do_statement "do {\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    } while (param_3 + param_4 != pbVar6);" (do "do") (compound_statement "{\n      bVar2 = *pbVar6;\n      lVar12 = uVar15 - (long)pbVar6;\n      pbVar6 = pbVar6 + 1;\n      local_848[bVar2] = (ulong)(param_3 + lVar12);\n    }" ({ "{") (expression_statement "bVar2 = *pbVar6;" (assignment_expression "bVar2 = *pbVar6" (identifier "bVar2") (= "=") (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6"))) (; ";")) (expression_statement "lVar12 = uVar15 - (long)pbVar6;" (assignment_expression "lVar12 = uVar15 - (long)pbVar6" (identifier "lVar12") (= "=") (binary_expression "uVar15 - (long)pbVar6" (identifier "uVar15") (- "-") (cast_expression "(long)pbVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar6")))) (; ";")) (expression_statement "pbVar6 = pbVar6 + 1;" (assignment_expression "pbVar6 = pbVar6 + 1" (identifier "pbVar6") (= "=") (binary_expression "pbVar6 + 1" (identifier "pbVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_848[bVar2] = (ulong)(param_3 + lVar12);" (assignment_expression "local_848[bVar2] = (ulong)(param_3 + lVar12)" (subscript_expression "local_848[bVar2]" (identifier "local_848") ([ "[") (identifier "bVar2") (] "]")) (= "=") (call_expression "(ulong)(param_3 + lVar12)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_3 + lVar12)" (( "(") (binary_expression "param_3 + lVar12" (identifier "param_3") (+ "+") (identifier "lVar12")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 + param_4 != pbVar6)" (( "(") (binary_expression "param_3 + param_4 != pbVar6" (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4")) (!= "!=") (identifier "pbVar6")) () ")")) (; ";")) (expression_statement "iVar4 = memcmp(param_3,param_3 + local_850,__n);" (assignment_expression "iVar4 = memcmp(param_3,param_3 + local_850,__n)" (identifier "iVar4") (= "=") (call_expression "memcmp(param_3,param_3 + local_850,__n)" (identifier "memcmp") (argument_list "(param_3,param_3 + local_850,__n)" (( "(") (identifier "param_3") (, ",") (binary_expression "param_3 + local_850" (identifier "param_3") (+ "+") (identifier "local_850")) (, ",") (identifier "__n") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar9 = __n - 1;\n      lVar12 = 0;\n      uVar14 = 0;\nLAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );\n    }" ({ "{") (expression_statement "uVar9 = __n - 1;" (assignment_expression "uVar9 = __n - 1" (identifier "uVar9") (= "=") (binary_expression "__n - 1" (identifier "__n") (- "-") (number_literal "1"))) (; ";")) (expression_statement "lVar12 = 0;" (assignment_expression "lVar12 = 0" (identifier "lVar12") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" (identifier "uVar14") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_00124981:\n      do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );" (statement_identifier "LAB_00124981") (: ":") (do_statement "do {\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      } while( true );" (do "do") (compound_statement "{\n        lVar1 = lVar12 + param_4;\n        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);\n        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;\n        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];\n        param_2 = lVar1;\n        if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }\n        lVar12 = lVar12 + uVar11;\n        uVar14 = 0;\n      }" ({ "{") (expression_statement "lVar1 = lVar12 + param_4;" (assignment_expression "lVar1 = lVar12 + param_4" (identifier "lVar1") (= "=") (binary_expression "lVar12 + param_4" (identifier "lVar12") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);" (assignment_expression "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2)" (identifier "pvVar8") (= "=") (call_expression "memchr((void *)(param_1 + param_2),0,lVar1 - param_2)" (identifier "memchr") (argument_list "((void *)(param_1 + param_2),0,lVar1 - param_2)" (( "(") (cast_expression "(void *)(param_1 + param_2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + param_2)" (( "(") (binary_expression "param_1 + param_2" (identifier "param_1") (+ "+") (identifier "param_2")) () ")"))) (, ",") (number_literal "0") (, ",") (binary_expression "lVar1 - param_2" (identifier "lVar1") (- "-") (identifier "param_2")) () ")")))) (; ";")) (if_statement "if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;" (if "if") (parenthesized_expression "((pvVar8 != (void *)0x0) || (lVar1 == 0))" (( "(") (binary_expression "(pvVar8 != (void *)0x0) || (lVar1 == 0)" (parenthesized_expression "(pvVar8 != (void *)0x0)" (( "(") (binary_expression "pvVar8 != (void *)0x0" (identifier "pvVar8") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(lVar1 == 0)" (( "(") (binary_expression "lVar1 == 0" (identifier "lVar1") (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_00124904;" (goto "goto") (statement_identifier "LAB_00124904") (; ";"))) (expression_statement "uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];" (assignment_expression "uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)]" (identifier "uVar11") (= "=") (subscript_expression "local_848[*(byte *)(param_1 + -1 + lVar1)]" (identifier "local_848") ([ "[") (pointer_expression "*(byte *)(param_1 + -1 + lVar1)" (* "*") (cast_expression "(byte *)(param_1 + -1 + lVar1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + -1 + lVar1)" (( "(") (binary_expression "param_1 + -1 + lVar1" (binary_expression "param_1 + -1" (identifier "param_1") (+ "+") (number_literal "-1")) (+ "+") (identifier "lVar1")) () ")")))) (] "]"))) (; ";")) (expression_statement "param_2 = lVar1;" (assignment_expression "param_2 = lVar1" (identifier "param_2") (= "=") (identifier "lVar1")) (; ";")) (if_statement "if (uVar11 == 0) {\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }\n        else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" (if "if") (parenthesized_expression "(uVar11 == 0)" (( "(") (binary_expression "uVar11 == 0" (identifier "uVar11") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar11 = __n;\n          if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }\n          if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }\n          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }\n          lVar12 = lVar12 + (1 - __n);\n        }" ({ "{") (expression_statement "uVar11 = __n;" (assignment_expression "uVar11 = __n" (identifier "uVar11") (= "=") (identifier "__n")) (; ";")) (if_statement "if (__n <= uVar14) {\n            uVar11 = uVar14;\n          }" (if "if") (parenthesized_expression "(__n <= uVar14)" (( "(") (binary_expression "__n <= uVar14" (identifier "__n") (<= "<=") (identifier "uVar14")) () ")")) (compound_statement "{\n            uVar11 = uVar14;\n          }" ({ "{") (expression_statement "uVar11 = uVar14;" (assignment_expression "uVar11 = uVar14" (identifier "uVar11") (= "=") (identifier "uVar14")) (; ";")) (} "}"))) (if_statement "if (uVar15 <= uVar11) {\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }" (if "if") (parenthesized_expression "(uVar15 <= uVar11)" (( "(") (binary_expression "uVar15 <= uVar11" (identifier "uVar15") (<= "<=") (identifier "uVar11")) () ")")) (compound_statement "{\nLAB_00124a14:\n            uVar11 = __n;\n            if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }\n            if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }\n            lVar12 = lVar12 + uVar7;\n            uVar14 = param_4 - uVar7;\n            goto LAB_00124981;\n          }" ({ "{") (labeled_statement "LAB_00124a14:\n            uVar11 = __n;" (statement_identifier "LAB_00124a14") (: ":") (expression_statement "uVar11 = __n;" (assignment_expression "uVar11 = __n" (identifier "uVar11") (= "=") (identifier "__n")) (; ";"))) (if_statement "if ((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }" (if "if") (parenthesized_expression "((uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)))" (( "(") (binary_expression "(uVar14 < __n) &&\n               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))" (parenthesized_expression "(uVar14 < __n)" (( "(") (binary_expression "uVar14 < __n" (identifier "uVar14") (< "<") (identifier "__n")) () ")")) (&& "&&") (parenthesized_expression "(uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))" (( "(") (comma_expression "uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)" (assignment_expression "uVar3 = uVar9" (identifier "uVar3") (= "=") (identifier "uVar9")) (, ",") (binary_expression "param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9)" (subscript_expression "param_3[uVar9]" (identifier "param_3") ([ "[") (identifier "uVar9") (] "]")) (== "==") (pointer_expression "*(byte *)(param_1 + lVar12 + uVar9)" (* "*") (cast_expression "(byte *)(param_1 + lVar12 + uVar9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar12 + uVar9)" (( "(") (binary_expression "param_1 + lVar12 + uVar9" (binary_expression "param_1 + lVar12" (identifier "param_1") (+ "+") (identifier "lVar12")) (+ "+") (identifier "uVar9")) () ")")))))) () ")"))) () ")")) (compound_statement "{\n              do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));\n            }" ({ "{") (do_statement "do {\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));" (do "do") (compound_statement "{\n                uVar11 = uVar3;\n                if (uVar14 == uVar11) break;\n                uVar3 = uVar11 - 1;\n              }" ({ "{") (expression_statement "uVar11 = uVar3;" (assignment_expression "uVar11 = uVar3" (identifier "uVar11") (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (uVar14 == uVar11) break;" (if "if") (parenthesized_expression "(uVar14 == uVar11)" (( "(") (binary_expression "uVar14 == uVar11" (identifier "uVar14") (== "==") (identifier "uVar11")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar3 = uVar11 - 1;" (assignment_expression "uVar3 = uVar11 - 1" (identifier "uVar3") (= "=") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12))" (( "(") (binary_expression "param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12)" (subscript_expression "param_3[uVar11 - 1]" (identifier "param_3") ([ "[") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1")) (] "]")) (== "==") (pointer_expression "*(byte *)((uVar11 - 1) + param_1 + lVar12)" (* "*") (cast_expression "(byte *)((uVar11 - 1) + param_1 + lVar12)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((uVar11 - 1) + param_1 + lVar12)" (( "(") (binary_expression "(uVar11 - 1) + param_1 + lVar12" (binary_expression "(uVar11 - 1) + param_1" (parenthesized_expression "(uVar11 - 1)" (( "(") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1")) () ")")) (+ "+") (identifier "param_1")) (+ "+") (identifier "lVar12")) () ")"))))) () ")")) (; ";")) (} "}"))) (if_statement "if (uVar11 < uVar14 + 1) {\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }" (if "if") (parenthesized_expression "(uVar11 < uVar14 + 1)" (( "(") (binary_expression "uVar11 < uVar14 + 1" (identifier "uVar11") (< "<") (binary_expression "uVar14 + 1" (identifier "uVar14") (+ "+") (number_literal "1"))) () ")")) (compound_statement "{\n              lVar12 = param_1 + lVar12;\n              goto LAB_00124906;\n            }" ({ "{") (expression_statement "lVar12 = param_1 + lVar12;" (assignment_expression "lVar12 = param_1 + lVar12" (identifier "lVar12") (= "=") (binary_expression "param_1 + lVar12" (identifier "param_1") (+ "+") (identifier "lVar12"))) (; ";")) (goto_statement "goto LAB_00124906;" (goto "goto") (statement_identifier "LAB_00124906") (; ";")) (} "}"))) (expression_statement "lVar12 = lVar12 + uVar7;" (assignment_expression "lVar12 = lVar12 + uVar7" (identifier "lVar12") (= "=") (binary_expression "lVar12 + uVar7" (identifier "lVar12") (+ "+") (identifier "uVar7"))) (; ";")) (expression_statement "uVar14 = param_4 - uVar7;" (assignment_expression "uVar14 = param_4 - uVar7" (identifier "uVar14") (= "=") (binary_expression "param_4 - uVar7" (identifier "param_4") (- "-") (identifier "uVar7"))) (; ";")) (goto_statement "goto LAB_00124981;" (goto "goto") (statement_identifier "LAB_00124981") (; ";")) (} "}"))) (if_statement "if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }" (if "if") (parenthesized_expression "(param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11))" (( "(") (binary_expression "param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)" (subscript_expression "param_3[uVar11]" (identifier "param_3") ([ "[") (identifier "uVar11") (] "]")) (== "==") (pointer_expression "*(byte *)(param_1 + lVar12 + uVar11)" (* "*") (cast_expression "(byte *)(param_1 + lVar12 + uVar11)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar12 + uVar11)" (( "(") (binary_expression "param_1 + lVar12 + uVar11" (binary_expression "param_1 + lVar12" (identifier "param_1") (+ "+") (identifier "lVar12")) (+ "+") (identifier "uVar11")) () ")"))))) () ")")) (compound_statement "{\n            do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));\n          }" ({ "{") (do_statement "do {\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));" (do "do") (compound_statement "{\n              uVar11 = uVar11 + 1;\n              if (uVar11 == uVar15) goto LAB_00124a14;\n            }" ({ "{") (expression_statement "uVar11 = uVar11 + 1;" (assignment_expression "uVar11 = uVar11 + 1" (identifier "uVar11") (= "=") (binary_expression "uVar11 + 1" (identifier "uVar11") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar11 == uVar15) goto LAB_00124a14;" (if "if") (parenthesized_expression "(uVar11 == uVar15)" (( "(") (binary_expression "uVar11 == uVar15" (identifier "uVar11") (== "==") (identifier "uVar15")) () ")")) (goto_statement "goto LAB_00124a14;" (goto "goto") (statement_identifier "LAB_00124a14") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11))" (( "(") (binary_expression "param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)" (subscript_expression "param_3[uVar11]" (identifier "param_3") ([ "[") (identifier "uVar11") (] "]")) (== "==") (pointer_expression "*(byte *)(param_1 + lVar12 + uVar11)" (* "*") (cast_expression "(byte *)(param_1 + lVar12 + uVar11)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + lVar12 + uVar11)" (( "(") (binary_expression "param_1 + lVar12 + uVar11" (binary_expression "param_1 + lVar12" (identifier "param_1") (+ "+") (identifier "lVar12")) (+ "+") (identifier "uVar11")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "lVar12 = lVar12 + (1 - __n);" (assignment_expression "lVar12 = lVar12 + (1 - __n)" (identifier "lVar12") (= "=") (binary_expression "lVar12 + (1 - __n)" (identifier "lVar12") (+ "+") (parenthesized_expression "(1 - __n)" (( "(") (binary_expression "1 - __n" (number_literal "1") (- "-") (identifier "__n")) () ")")))) (; ";")) (} "}")) (else_clause "else if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" (else "else") (if_statement "if ((uVar11 < uVar7) && (uVar14 != 0)) {\n          uVar11 = param_4 - uVar7;\n        }" (if "if") (parenthesized_expression "((uVar11 < uVar7) && (uVar14 != 0))" (( "(") (binary_expression "(uVar11 < uVar7) && (uVar14 != 0)" (parenthesized_expression "(uVar11 < uVar7)" (( "(") (binary_expression "uVar11 < uVar7" (identifier "uVar11") (< "<") (identifier "uVar7")) () ")")) (&& "&&") (parenthesized_expression "(uVar14 != 0)" (( "(") (binary_expression "uVar14 != 0" (identifier "uVar14") (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n          uVar11 = param_4 - uVar7;\n        }" ({ "{") (expression_statement "uVar11 = param_4 - uVar7;" (assignment_expression "uVar11 = param_4 - uVar7" (identifier "uVar11") (= "=") (binary_expression "param_4 - uVar7" (identifier "param_4") (- "-") (identifier "uVar7"))) (; ";")) (} "}"))))) (expression_statement "lVar12 = lVar12 + uVar11;" (assignment_expression "lVar12 = lVar12 + uVar11" (identifier "lVar12") (= "=") (binary_expression "lVar12 + uVar11" (identifier "lVar12") (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" (identifier "uVar14") (= "=") (number_literal "0")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}"))) (} "}")))) (expression_statement "uVar7 = param_4 - __n;" (assignment_expression "uVar7 = param_4 - __n" (identifier "uVar7") (= "=") (binary_expression "param_4 - __n" (identifier "param_4") (- "-") (identifier "__n"))) (; ";")) (if_statement "if (param_4 - __n < __n) {\n    uVar7 = __n;\n  }" (if "if") (parenthesized_expression "(param_4 - __n < __n)" (( "(") (binary_expression "param_4 - __n < __n" (binary_expression "param_4 - __n" (identifier "param_4") (- "-") (identifier "__n")) (< "<") (identifier "__n")) () ")")) (compound_statement "{\n    uVar7 = __n;\n  }" ({ "{") (expression_statement "uVar7 = __n;" (assignment_expression "uVar7 = __n" (identifier "uVar7") (= "=") (identifier "__n")) (; ";")) (} "}"))) (expression_statement "lVar13 = 0;" (assignment_expression "lVar13 = 0" (identifier "lVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar1 = __n - 1;" (assignment_expression "lVar1 = __n - 1" (identifier "lVar1") (= "=") (binary_expression "__n - 1" (identifier "__n") (- "-") (number_literal "1"))) (; ";")) (labeled_statement "LAB_00124826:\n  do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );" (statement_identifier "LAB_00124826") (: ":") (do_statement "do {\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  } while( true );" (do "do") (compound_statement "{\n    lVar12 = lVar13 + param_4;\n    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);\n    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;\n    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];\n    param_2 = lVar12;\n    if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }\n    lVar13 = lVar13 + uVar9;\n  }" ({ "{") (expression_statement "lVar12 = lVar13 + param_4;" (assignment_expression "lVar12 = lVar13 + param_4" (identifier "lVar12") (= "=") (binary_expression "lVar13 + param_4" (identifier "lVar13") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);" (assignment_expression "pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2)" (identifier "pvVar8") (= "=") (call_expression "memchr((void *)(param_1 + param_2),0,lVar12 - param_2)" (identifier "memchr") (argument_list "((void *)(param_1 + param_2),0,lVar12 - param_2)" (( "(") (cast_expression "(void *)(param_1 + param_2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + param_2)" (( "(") (binary_expression "param_1 + param_2" (identifier "param_1") (+ "+") (identifier "param_2")) () ")"))) (, ",") (number_literal "0") (, ",") (binary_expression "lVar12 - param_2" (identifier "lVar12") (- "-") (identifier "param_2")) () ")")))) (; ";")) (if_statement "if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;" (if "if") (parenthesized_expression "((pvVar8 != (void *)0x0) || (lVar12 == 0))" (( "(") (binary_expression "(pvVar8 != (void *)0x0) || (lVar12 == 0)" (parenthesized_expression "(pvVar8 != (void *)0x0)" (( "(") (binary_expression "pvVar8 != (void *)0x0" (identifier "pvVar8") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(lVar12 == 0)" (( "(") (binary_expression "lVar12 == 0" (identifier "lVar12") (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_00124904;" (goto "goto") (statement_identifier "LAB_00124904") (; ";"))) (expression_statement "uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];" (assignment_expression "uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)]" (identifier "uVar9") (= "=") (subscript_expression "local_848[*(byte *)(param_1 + -1 + lVar12)]" (identifier "local_848") ([ "[") (pointer_expression "*(byte *)(param_1 + -1 + lVar12)" (* "*") (cast_expression "(byte *)(param_1 + -1 + lVar12)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + -1 + lVar12)" (( "(") (binary_expression "param_1 + -1 + lVar12" (binary_expression "param_1 + -1" (identifier "param_1") (+ "+") (number_literal "-1")) (+ "+") (identifier "lVar12")) () ")")))) (] "]"))) (; ";")) (expression_statement "param_2 = lVar12;" (assignment_expression "param_2 = lVar12" (identifier "param_2") (= "=") (identifier "lVar12")) (; ";")) (if_statement "if (uVar9 == 0) {\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }" (if "if") (parenthesized_expression "(uVar9 == 0)" (( "(") (binary_expression "uVar9 == 0" (identifier "uVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      lVar12 = param_1 + lVar13;\n      if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }\n      uVar9 = __n;\n      if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }\n      lVar13 = lVar13 + (1 - __n);\n    }" ({ "{") (expression_statement "lVar12 = param_1 + lVar13;" (assignment_expression "lVar12 = param_1 + lVar13" (identifier "lVar12") (= "=") (binary_expression "param_1 + lVar13" (identifier "param_1") (+ "+") (identifier "lVar13"))) (; ";")) (if_statement "if (uVar15 <= __n) {\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }" (if "if") (parenthesized_expression "(uVar15 <= __n)" (( "(") (binary_expression "uVar15 <= __n" (identifier "uVar15") (<= "<=") (identifier "__n")) () ")")) (compound_statement "{\nLAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;\n        lVar10 = lVar1;\n        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }\n        lVar13 = lVar13 + uVar7 + 1;\n        goto LAB_00124826;\n      }" ({ "{") (labeled_statement "LAB_001248a3:\n        if (lVar1 == -1) goto LAB_00124906;" (statement_identifier "LAB_001248a3") (: ":") (if_statement "if (lVar1 == -1) goto LAB_00124906;" (if "if") (parenthesized_expression "(lVar1 == -1)" (( "(") (binary_expression "lVar1 == -1" (identifier "lVar1") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_00124906;" (goto "goto") (statement_identifier "LAB_00124906") (; ";")))) (expression_statement "lVar10 = lVar1;" (assignment_expression "lVar10 = lVar1" (identifier "lVar10") (= "=") (identifier "lVar1")) (; ";")) (if_statement "if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }" (if "if") (parenthesized_expression "(*(byte *)(lVar12 + lVar1) == param_3[lVar1])" (( "(") (binary_expression "*(byte *)(lVar12 + lVar1) == param_3[lVar1]" (pointer_expression "*(byte *)(lVar12 + lVar1)" (* "*") (cast_expression "(byte *)(lVar12 + lVar1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar12 + lVar1)" (( "(") (binary_expression "lVar12 + lVar1" (identifier "lVar12") (+ "+") (identifier "lVar1")) () ")")))) (== "==") (subscript_expression "param_3[lVar1]" (identifier "param_3") ([ "[") (identifier "lVar1") (] "]"))) () ")")) (compound_statement "{\n          do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));\n        }" ({ "{") (do_statement "do {\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));" (do "do") (compound_statement "{\n            lVar10 = lVar10 + -1;\n            if (lVar10 == -1) goto LAB_00124906;\n          }" ({ "{") (expression_statement "lVar10 = lVar10 + -1;" (assignment_expression "lVar10 = lVar10 + -1" (identifier "lVar10") (= "=") (binary_expression "lVar10 + -1" (identifier "lVar10") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (lVar10 == -1) goto LAB_00124906;" (if "if") (parenthesized_expression "(lVar10 == -1)" (( "(") (binary_expression "lVar10 == -1" (identifier "lVar10") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_00124906;" (goto "goto") (statement_identifier "LAB_00124906") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_3[lVar10] == *(byte *)(lVar12 + lVar10))" (( "(") (binary_expression "param_3[lVar10] == *(byte *)(lVar12 + lVar10)" (subscript_expression "param_3[lVar10]" (identifier "param_3") ([ "[") (identifier "lVar10") (] "]")) (== "==") (pointer_expression "*(byte *)(lVar12 + lVar10)" (* "*") (cast_expression "(byte *)(lVar12 + lVar10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar12 + lVar10)" (( "(") (binary_expression "lVar12 + lVar10" (identifier "lVar12") (+ "+") (identifier "lVar10")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "lVar13 = lVar13 + uVar7 + 1;" (assignment_expression "lVar13 = lVar13 + uVar7 + 1" (identifier "lVar13") (= "=") (binary_expression "lVar13 + uVar7 + 1" (binary_expression "lVar13 + uVar7" (identifier "lVar13") (+ "+") (identifier "uVar7")) (+ "+") (number_literal "1"))) (; ";")) (goto_statement "goto LAB_00124826;" (goto "goto") (statement_identifier "LAB_00124826") (; ";")) (} "}"))) (expression_statement "uVar9 = __n;" (assignment_expression "uVar9 = __n" (identifier "uVar9") (= "=") (identifier "__n")) (; ";")) (if_statement "if (*(byte *)(lVar12 + __n) == param_3[__n]) {\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }" (if "if") (parenthesized_expression "(*(byte *)(lVar12 + __n) == param_3[__n])" (( "(") (binary_expression "*(byte *)(lVar12 + __n) == param_3[__n]" (pointer_expression "*(byte *)(lVar12 + __n)" (* "*") (cast_expression "(byte *)(lVar12 + __n)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar12 + __n)" (( "(") (binary_expression "lVar12 + __n" (identifier "lVar12") (+ "+") (identifier "__n")) () ")")))) (== "==") (subscript_expression "param_3[__n]" (identifier "param_3") ([ "[") (identifier "__n") (] "]"))) () ")")) (compound_statement "{\n        do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));\n      }" ({ "{") (do_statement "do {\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));" (do "do") (compound_statement "{\n          uVar9 = uVar9 + 1;\n          if (uVar15 <= uVar9) goto LAB_001248a3;\n        }" ({ "{") (expression_statement "uVar9 = uVar9 + 1;" (assignment_expression "uVar9 = uVar9 + 1" (identifier "uVar9") (= "=") (binary_expression "uVar9 + 1" (identifier "uVar9") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar15 <= uVar9) goto LAB_001248a3;" (if "if") (parenthesized_expression "(uVar15 <= uVar9)" (( "(") (binary_expression "uVar15 <= uVar9" (identifier "uVar15") (<= "<=") (identifier "uVar9")) () ")")) (goto_statement "goto LAB_001248a3;" (goto "goto") (statement_identifier "LAB_001248a3") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_3[uVar9] == *(byte *)(lVar12 + uVar9))" (( "(") (binary_expression "param_3[uVar9] == *(byte *)(lVar12 + uVar9)" (subscript_expression "param_3[uVar9]" (identifier "param_3") ([ "[") (identifier "uVar9") (] "]")) (== "==") (pointer_expression "*(byte *)(lVar12 + uVar9)" (* "*") (cast_expression "(byte *)(lVar12 + uVar9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar12 + uVar9)" (( "(") (binary_expression "lVar12 + uVar9" (identifier "lVar12") (+ "+") (identifier "uVar9")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "lVar13 = lVar13 + (1 - __n);" (assignment_expression "lVar13 = lVar13 + (1 - __n)" (identifier "lVar13") (= "=") (binary_expression "lVar13 + (1 - __n)" (identifier "lVar13") (+ "+") (parenthesized_expression "(1 - __n)" (( "(") (binary_expression "1 - __n" (number_literal "1") (- "-") (identifier "__n")) () ")")))) (; ";")) (} "}"))) (expression_statement "lVar13 = lVar13 + uVar9;" (assignment_expression "lVar13 = lVar13 + uVar9" (identifier "lVar13") (= "=") (binary_expression "lVar13 + uVar9" (identifier "lVar13") (+ "+") (identifier "uVar9"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}")))

char * function_1(type_1 *var_16,size_t var_17,type_1 *var_6,size_t var_2)

{
  size_t var_23;
  size_t var_18;
  type_2 bVar3;
  type_3 uVar4;
  int var_8;
  type_3 var_14;
  size_t *var_4;
  type_2 *var_12;
  type_3 var_22;
  void *var_19;
  type_3 var_21;
  long var_25;
  type_1 *puVar12;
  type_3 var_20;
  long var_13;
  long var_24;
  type_3 var_11;
  long var_1;
  size_t var_7;
  size_t shift_table [256];
  size_t local_48;
  long var_9;
  
  var_9 = *(long *)(var_1 + 0x28);
  if (var_2 < 3) {
    var_7 = 1;
    var_14 = var_2 - 1;
  }
  else {
    var_14 = var_3(var_6,var_2,&var_7);
  }
  var_23 = var_7;
  var_4 = shift_table;
  do {
    *var_4 = var_2;
    var_4[1] = var_2;
    var_4 = var_4 + 2;
  } while (&local_48 != var_4);
  if (var_2 == 0) {
    var_11 = 0xffffffffffffffff;
    var_8 = var_5(var_6,var_6 + var_7,var_14);
    if (var_8 == 0) {
LAB_00124904:
      puVar12 = (type_1 *)0x0;
LAB_00124906:
      if (var_9 != *(long *)(var_1 + 0x28)) {
                    /* WARNING: Subroutine does not return */
        var_10();
      }
      return (char *)puVar12;
    }
  }
  else {
    var_11 = var_2 - 1;
    var_12 = var_6;
    do {
      bVar3 = *var_12;
      var_13 = var_11 - (long)var_12;
      var_12 = var_12 + 1;
      shift_table[bVar3] = (size_t)(var_6 + var_13);
    } while (var_6 + var_2 != var_12);
    var_8 = var_5(var_6,var_6 + var_7,var_14);
    if (var_8 == 0) {
      var_22 = var_14 - 1;
      var_13 = 0;
      var_21 = 0;
LAB_00124981:
      do {
        var_18 = var_13 + var_2;
        var_19 = var_15(var_16 + var_17,0,var_18 - var_17);
        if ((var_19 != (void *)0x0) || (var_18 == 0)) goto LAB_00124904;
        var_20 = shift_table[var_16[var_18 - 1]];
        var_17 = var_18;
        if (var_20 == 0) {
          var_20 = var_14;
          if (var_14 <= var_21) {
            var_20 = var_21;
          }
          if (var_11 <= var_20) {
LAB_00124a14:
            var_20 = var_14;
            if ((var_21 < var_14) && (uVar4 = var_22, var_6[var_22] == var_16[var_22 + var_13])) {
              do {
                var_20 = uVar4;
                if (var_21 == var_20) break;
                uVar4 = var_20 - 1;
              } while (var_6[var_20 - 1] == var_16[(var_20 - 1) + var_13]);
            }
            if (var_20 < var_21 + 1) {
              puVar12 = var_16 + var_13;
              goto LAB_00124906;
            }
            var_13 = var_13 + var_23;
            var_21 = var_2 - var_23;
            goto LAB_00124981;
          }
          if (var_6[var_20] == var_16[var_20 + var_13]) {
            do {
              var_20 = var_20 + 1;
              if (var_20 == var_11) goto LAB_00124a14;
            } while (var_6[var_20] == var_16[var_20 + var_13]);
          }
          var_13 = var_13 + (1 - var_14);
        }
        else if ((var_20 < var_23) && (var_21 != 0)) {
          var_20 = var_2 - var_23;
        }
        var_13 = var_13 + var_20;
        var_21 = 0;
      } while( true );
    }
  }
  var_22 = var_2 - var_14;
  if (var_2 - var_14 < var_14) {
    var_22 = var_14;
  }
  var_24 = 0;
  var_13 = var_14 - 1;
LAB_00124826:
  do {
    var_23 = var_24 + var_2;
    var_19 = var_15(var_16 + var_17,0,var_23 - var_17);
    if ((var_19 != (void *)0x0) || (var_23 == 0)) goto LAB_00124904;
    var_21 = shift_table[var_16[var_23 - 1]];
    var_17 = var_23;
    if (var_21 == 0) {
      puVar12 = var_16 + var_24;
      if (var_11 <= var_14) {
LAB_001248a3:
        if (var_13 == -1) goto LAB_00124906;
        var_25 = var_13;
        if (puVar12[var_13] == var_6[var_13]) {
          do {
            var_25 = var_25 + -1;
            if (var_25 == -1) goto LAB_00124906;
          } while (var_6[var_25] == puVar12[var_25]);
        }
        var_24 = var_24 + var_22 + 1;
        goto LAB_00124826;
      }
      var_21 = var_14;
      if (puVar12[var_14] == var_6[var_14]) {
        do {
          var_21 = var_21 + 1;
          if (var_11 <= var_21) goto LAB_001248a3;
        } while (var_6[var_21] == puVar12[var_21]);
      }
      var_24 = var_24 + (1 - var_14);
    }
    var_24 = var_24 + var_21;
  } while( true );
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_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: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (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: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (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))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (number_literal) (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)) right: (identifier)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))) condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) condition: (parenthesized_expression (true))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (number_literal) (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) (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: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (subscript_expression argument: (identifier) index: (identifier)))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (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: (identifier)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (goto_statement label: (statement_identifier)))) (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: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (subscript_expression argument: (identifier) index: (identifier)))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))) condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (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: (identifier)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) condition: (parenthesized_expression (true)))))))

long MASKED(long param_1,long param_2,byte *param_3,ulong param_4)

{
  long lVar1;
  byte bVar2;
  ulong uVar3;
  int iVar4;
  ulong __n;
  ulong *puVar5;
  byte *pbVar6;
  ulong uVar7;
  void *pvVar8;
  ulong uVar9;
  long lVar10;
  ulong uVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  ulong uVar15;
  long in_FS_OFFSET;
  ulong local_850;
  ulong local_848 [257];
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_4 < 3) {
    local_850 = 1;
    __n = param_4 - 1;
  }
  else {
    __n = FUN_001245c0(param_3,param_4,&local_850);
  }
  uVar7 = local_850;
  puVar5 = local_848;
  do {
    *puVar5 = param_4;
    puVar5[1] = param_4;
    puVar5 = puVar5 + 2;
  } while (local_848 + 0x100 != puVar5);
  if (param_4 == 0) {
    uVar15 = 0xffffffffffffffff;
    iVar4 = memcmp(param_3,param_3 + local_850,__n);
    if (iVar4 == 0) {
LAB_00124904:
      lVar12 = 0;
LAB_00124906:
      if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
        __stack_chk_fail();
      }
      return lVar12;
    }
  }
  else {
    uVar15 = param_4 - 1;
    pbVar6 = param_3;
    do {
      bVar2 = *pbVar6;
      lVar12 = uVar15 - (long)pbVar6;
      pbVar6 = pbVar6 + 1;
      local_848[bVar2] = (ulong)(param_3 + lVar12);
    } while (param_3 + param_4 != pbVar6);
    iVar4 = memcmp(param_3,param_3 + local_850,__n);
    if (iVar4 == 0) {
      uVar9 = __n - 1;
      lVar12 = 0;
      uVar14 = 0;
LAB_00124981:
      do {
        lVar1 = lVar12 + param_4;
        pvVar8 = memchr((void *)(param_1 + param_2),0,lVar1 - param_2);
        if ((pvVar8 != (void *)0x0) || (lVar1 == 0)) goto LAB_00124904;
        uVar11 = local_848[*(byte *)(param_1 + -1 + lVar1)];
        param_2 = lVar1;
        if (uVar11 == 0) {
          uVar11 = __n;
          if (__n <= uVar14) {
            uVar11 = uVar14;
          }
          if (uVar15 <= uVar11) {
LAB_00124a14:
            uVar11 = __n;
            if ((uVar14 < __n) &&
               (uVar3 = uVar9, param_3[uVar9] == *(byte *)(param_1 + lVar12 + uVar9))) {
              do {
                uVar11 = uVar3;
                if (uVar14 == uVar11) break;
                uVar3 = uVar11 - 1;
              } while (param_3[uVar11 - 1] == *(byte *)((uVar11 - 1) + param_1 + lVar12));
            }
            if (uVar11 < uVar14 + 1) {
              lVar12 = param_1 + lVar12;
              goto LAB_00124906;
            }
            lVar12 = lVar12 + uVar7;
            uVar14 = param_4 - uVar7;
            goto LAB_00124981;
          }
          if (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11)) {
            do {
              uVar11 = uVar11 + 1;
              if (uVar11 == uVar15) goto LAB_00124a14;
            } while (param_3[uVar11] == *(byte *)(param_1 + lVar12 + uVar11));
          }
          lVar12 = lVar12 + (1 - __n);
        }
        else if ((uVar11 < uVar7) && (uVar14 != 0)) {
          uVar11 = param_4 - uVar7;
        }
        lVar12 = lVar12 + uVar11;
        uVar14 = 0;
      } while( true );
    }
  }
  uVar7 = param_4 - __n;
  if (param_4 - __n < __n) {
    uVar7 = __n;
  }
  lVar13 = 0;
  lVar1 = __n - 1;
LAB_00124826:
  do {
    lVar12 = lVar13 + param_4;
    pvVar8 = memchr((void *)(param_1 + param_2),0,lVar12 - param_2);
    if ((pvVar8 != (void *)0x0) || (lVar12 == 0)) goto LAB_00124904;
    uVar9 = local_848[*(byte *)(param_1 + -1 + lVar12)];
    param_2 = lVar12;
    if (uVar9 == 0) {
      lVar12 = param_1 + lVar13;
      if (uVar15 <= __n) {
LAB_001248a3:
        if (lVar1 == -1) goto LAB_00124906;
        lVar10 = lVar1;
        if (*(byte *)(lVar12 + lVar1) == param_3[lVar1]) {
          do {
            lVar10 = lVar10 + -1;
            if (lVar10 == -1) goto LAB_00124906;
          } while (param_3[lVar10] == *(byte *)(lVar12 + lVar10));
        }
        lVar13 = lVar13 + uVar7 + 1;
        goto LAB_00124826;
      }
      uVar9 = __n;
      if (*(byte *)(lVar12 + __n) == param_3[__n]) {
        do {
          uVar9 = uVar9 + 1;
          if (uVar15 <= uVar9) goto LAB_001248a3;
        } while (param_3[uVar9] == *(byte *)(lVar12 + uVar9));
      }
      lVar13 = lVar13 + (1 - __n);
    }
    lVar13 = lVar13 + uVar9;
  } while( true );
}

