
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void * memchr2(void *s,int c1_in,int c2_in,size_t n)

{
  char cVar1;
  void *pvVar2;
  uint uVar3;
  uint uVar4;
  uint *puVar5;
  uint uVar6;
  uint uVar7;
  
  if ((char)c1_in == (char)c2_in) {
    pvVar2 = rpl_memchr(s,c1_in & 0xff,n);
    return pvVar2;
  }
  if ((n == 0) || (((uint)s & 3) == 0)) {
LAB_0002b543:
    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;
    uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;
    uVar6 = uVar6 << 0x10 | uVar6;
    uVar3 = uVar3 << 0x10 | uVar3;
    if (n < 4) {
LAB_0002b5ff:
      if (n == 0) {
        return (void *)0x0;
      }
    }
    else {
                    /* WARNING: Load size is inaccurate */
      uVar7 = uVar6 ^ *s;
      uVar4 = *s ^ uVar3;
      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;
          (uVar4 & 0x80808080) == 0;
          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {
        n = n - 4;
        s = (void *)((int)s + 4);
        if (n < 4) goto LAB_0002b5ff;
                    /* WARNING: Load size is inaccurate */
        uVar4 = *s ^ uVar3;
        uVar7 = *s ^ uVar6;
      }
    }
                    /* WARNING: Load size is inaccurate */
    if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {
      puVar5 = (uint *)(n + (int)s);
      do {
        s = (void *)((int)s + 1);
        if (puVar5 == (uint *)s) {
          return (void *)0x0;
        }
                    /* WARNING: Load size is inaccurate */
      } while ((*s != (char)c2_in) && (*s != (char)c1_in));
    }
  }
  else {
                    /* WARNING: Load size is inaccurate */
    cVar1 = *s;
    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {
      s = (void *)((int)s + 1);
      n = n - 1;
      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;
                    /* WARNING: Load size is inaccurate */
      cVar1 = *s;
    }
  }
  return s;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

uint * FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)

{
  char cVar1;
  uint uVar2;
  uint *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  
  if (param_2 == param_3) {
    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);
    return puVar3;
  }
  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {
LAB_0002b543:
    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));
    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));
    if (param_4 < 4) {
LAB_0002b5ff:
      if (param_4 == 0) {
        return (uint *)0x0;
      }
    }
    else {
      uVar6 = uVar5 ^ *param_1;
      uVar2 = *param_1 ^ uVar4;
      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;
          (uVar2 & 0x80808080) == 0;
          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {
        param_4 = param_4 - 4;
        param_1 = param_1 + 1;
        if (param_4 < 4) goto LAB_0002b5ff;
        uVar2 = *param_1 ^ uVar4;
        uVar6 = *param_1 ^ uVar5;
      }
    }
    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {
      puVar3 = (uint *)(param_4 + (int)param_1);
      do {
        param_1 = (uint *)((int)param_1 + 1);
        if (puVar3 == param_1) {
          return (uint *)0x0;
        }
      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));
    }
  }
  else {
    cVar1 = (char)*param_1;
    while ((cVar1 != param_3 && (cVar1 != param_2))) {
      param_1 = (uint *)((int)param_1 + 1);
      param_4 = param_4 - 1;
      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;
      cVar1 = *(char *)param_1;
    }
  }
  return param_1;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000142a0
ADD EBX,0x1c913
SUB ESP,0x1c
MOVZX EDI,byte ptr [ESP + 0x38]
MOV EAX,dword ptr [ESP + 0x30]
MOV EDX,dword ptr [ESP + 0x3c]
MOVZX EBP,byte ptr [ESP + 0x34]
MOV ECX,EDI
CMP byte ptr [ESP + 0x34],CL
JZ 0x0002b648
TEST EDX,EDX
JZ 0x0002b543
TEST AL,0x3
JZ 0x0002b543
MOVZX ECX,byte ptr [EAX]
CMP CL,byte ptr [ESP + 0x38]
JZ 0x0002b63a
CMP CL,byte ptr [ESP + 0x34]
JNZ 0x0002b53b
JMP 0x0002b63a
TEST AL,0x3
JZ 0x0002b543
MOVZX ECX,byte ptr [EAX]
MOV EBX,EDI
CMP CL,BL
JZ 0x0002b63a
MOV EBX,EBP
CMP CL,BL
JZ 0x0002b63a
ADD EAX,0x1
SUB EDX,0x1
JNZ 0x0002b520
MOV EBX,dword ptr [ESP + 0x34]
MOVZX ECX,byte ptr [ESP + 0x34]
MOVZX ESI,byte ptr [ESP + 0x38]
SHL EBX,0x8
MOVZX EBX,BX
OR EBX,ECX
MOV ECX,dword ptr [ESP + 0x38]
SHL ECX,0x8
MOVZX ECX,CX
OR ECX,ESI
MOV ESI,EBX
SHL ESI,0x10
OR ESI,EBX
MOV EBX,ECX
SHL EBX,0x10
MOV dword ptr [ESP + 0x4],ESI
OR EBX,ECX
MOV dword ptr [ESP + 0x8],EBX
CMP EDX,0x3
JBE 0x0002b5ff
MOV ECX,dword ptr [EAX]
XOR ESI,ECX
XOR ECX,EBX
LEA EBX,[ESI + 0xfefefeff]
NOT ESI
AND EBX,ESI
LEA ESI,[ECX + 0xfefefeff]
NOT ECX
AND ECX,ESI
OR ECX,EBX
AND ECX,0x80808080
JNZ 0x0002b603
MOV EBX,EBP
MOV EBP,dword ptr [ESP + 0x8]
MOV byte ptr [ESP + 0xe],BL
MOV EBX,EDI
MOV EDI,dword ptr [ESP + 0x4]
MOV byte ptr [ESP + 0xf],BL
JMP 0x0002b5ea
MOV ECX,dword ptr [EAX]
MOV ESI,ECX
XOR ECX,EBP
XOR ESI,EDI
LEA EBX,[ESI + 0xfefefeff]
NOT ESI
AND EBX,ESI
LEA ESI,[ECX + 0xfefefeff]
NOT ECX
AND ECX,ESI
OR ECX,EBX
AND ECX,0x80808080
JNZ 0x0002b668
SUB EDX,0x4
ADD EAX,0x4
CMP EDX,0x3
JA 0x0002b5c0
MOVZX EBP,byte ptr [ESP + 0xe]
MOVZX EDI,byte ptr [ESP + 0xf]
TEST EDX,EDX
JZ 0x0002b638
MOVZX ECX,byte ptr [EAX]
CMP CL,byte ptr [ESP + 0x38]
JZ 0x0002b63a
CMP CL,byte ptr [ESP + 0x34]
JZ 0x0002b63a
ADD EDX,EAX
LEA ECX,[EAX + 0x1]
MOV ESI,EDX
JMP 0x0002b632
MOVZX EBX,byte ptr [ECX]
MOV EDX,EDI
ADD ECX,0x1
CMP BL,DL
JZ 0x0002b63a
MOV EDX,EBP
CMP BL,DL
JZ 0x0002b63a
MOV EAX,ECX
CMP ESI,ECX
JNZ 0x0002b620
XOR EAX,EAX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
PUSH EDX
MOVZX EDX,byte ptr [ESP + 0x3c]
PUSH EDX
PUSH EAX
CALL 0x00036f10
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOVZX EBP,byte ptr [ESP + 0xe]
MOVZX EDI,byte ptr [ESP + 0xf]
JMP 0x0002b603
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint * FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)\n\n{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}\n\n" comment (function_definition "uint * FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)\n\n{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}" type_identifier (pointer_declarator "* FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)" * (function_declarator "FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)" identifier (parameter_list "(uint *param_1,char param_2,char param_3,uint param_4)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char param_2" primitive_type identifier) , (parameter_declaration "char param_3" primitive_type identifier) , (parameter_declaration "uint param_4" type_identifier identifier) )))) (compound_statement "{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (if_statement "if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }" if (parenthesized_expression "(param_2 == param_3)" ( (binary_expression "param_2 == param_3" identifier == identifier) )) (compound_statement "{\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }" { (expression_statement "puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);" (assignment_expression "puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4)" identifier = (cast_expression "(uint *)FUN_00036f10(param_1,param_2,param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00036f10(param_1,param_2,param_4)" identifier (argument_list "(param_1,param_2,param_4)" ( identifier , identifier , identifier ))))) ;) (return_statement "return puVar3;" return identifier ;) })) (if_statement "if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" if (parenthesized_expression "((param_4 == 0) || (((uint)param_1 & 3) == 0))" ( (binary_expression "(param_4 == 0) || (((uint)param_1 & 3) == 0)" (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) || (parenthesized_expression "(((uint)param_1 & 3) == 0)" ( (binary_expression "((uint)param_1 & 3) == 0" (parenthesized_expression "((uint)param_1 & 3)" ( (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }" { (labeled_statement "LAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));" statement_identifier : (expression_statement "uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));" (assignment_expression "uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" identifier = (call_expression "CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" identifier (argument_list "(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" ( (call_expression "CONCAT11(param_2,param_2)" identifier (argument_list "(param_2,param_2)" ( identifier , identifier ))) , (call_expression "CONCAT11(param_2,param_2)" identifier (argument_list "(param_2,param_2)" ( identifier , identifier ))) )))) ;)) (expression_statement "uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));" (assignment_expression "uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" identifier = (call_expression "CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" identifier (argument_list "(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" ( (call_expression "CONCAT11(param_3,param_3)" identifier (argument_list "(param_3,param_3)" ( identifier , identifier ))) , (call_expression "CONCAT11(param_3,param_3)" identifier (argument_list "(param_3,param_3)" ( identifier , identifier ))) )))) ;) (if_statement "if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" if (parenthesized_expression "(param_4 < 4)" ( (binary_expression "param_4 < 4" identifier < number_literal) )) (compound_statement "{\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }" { (labeled_statement "LAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }" statement_identifier : (if_statement "if (param_4 == 0) {\n        return (uint *)0x0;\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        return (uint *)0x0;\n      }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))) }) (else_clause "else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" else (compound_statement "{\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" { (expression_statement "uVar6 = uVar5 ^ *param_1;" (assignment_expression "uVar6 = uVar5 ^ *param_1" identifier = (binary_expression "uVar5 ^ *param_1" identifier ^ (pointer_expression "*param_1" * identifier))) ;) (expression_statement "uVar2 = *param_1 ^ uVar4;" (assignment_expression "uVar2 = *param_1 ^ uVar4" identifier = (binary_expression "*param_1 ^ uVar4" (pointer_expression "*param_1" * identifier) ^ identifier)) ;) (for_statement "for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }" for ( (assignment_expression "uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" identifier = (binary_expression "~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (binary_expression "~uVar2 & uVar2 + 0xfefefeff" (unary_expression "~uVar2" ~ identifier) & (binary_expression "uVar2 + 0xfefefeff" identifier + number_literal)) | (binary_expression "uVar6 + 0xfefefeff & ~uVar6" (binary_expression "uVar6 + 0xfefefeff" identifier + number_literal) & (unary_expression "~uVar6" ~ identifier)))) ; (binary_expression "(uVar2 & 0x80808080) == 0" (parenthesized_expression "(uVar2 & 0x80808080)" ( (binary_expression "uVar2 & 0x80808080" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" identifier = (binary_expression "~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (binary_expression "~uVar2 & uVar2 + 0xfefefeff" (unary_expression "~uVar2" ~ identifier) & (binary_expression "uVar2 + 0xfefefeff" identifier + number_literal)) | (binary_expression "uVar6 + 0xfefefeff & ~uVar6" (binary_expression "uVar6 + 0xfefefeff" identifier + number_literal) & (unary_expression "~uVar6" ~ identifier)))) ) (compound_statement "{\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }" { (expression_statement "param_4 = param_4 - 4;" (assignment_expression "param_4 = param_4 - 4" identifier = (binary_expression "param_4 - 4" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (param_4 < 4) goto LAB_0002b5ff;" if (parenthesized_expression "(param_4 < 4)" ( (binary_expression "param_4 < 4" identifier < number_literal) )) (goto_statement "goto LAB_0002b5ff;" goto statement_identifier ;)) (expression_statement "uVar2 = *param_1 ^ uVar4;" (assignment_expression "uVar2 = *param_1 ^ uVar4" identifier = (binary_expression "*param_1 ^ uVar4" (pointer_expression "*param_1" * identifier) ^ identifier)) ;) (expression_statement "uVar6 = *param_1 ^ uVar5;" (assignment_expression "uVar6 = *param_1 ^ uVar5" identifier = (binary_expression "*param_1 ^ uVar5" (pointer_expression "*param_1" * identifier) ^ identifier)) ;) })) }))) (if_statement "if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }" if (parenthesized_expression "(((char)*param_1 != param_3) && ((char)*param_1 != param_2))" ( (binary_expression "((char)*param_1 != param_3) && ((char)*param_1 != param_2)" (parenthesized_expression "((char)*param_1 != param_3)" ( (binary_expression "(char)*param_1 != param_3" (cast_expression "(char)*param_1" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*param_1" * identifier)) != identifier) )) && (parenthesized_expression "((char)*param_1 != param_2)" ( (binary_expression "(char)*param_1 != param_2" (cast_expression "(char)*param_1" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*param_1" * identifier)) != identifier) ))) )) (compound_statement "{\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }" { (expression_statement "puVar3 = (uint *)(param_4 + (int)param_1);" (assignment_expression "puVar3 = (uint *)(param_4 + (int)param_1)" identifier = (cast_expression "(uint *)(param_4 + (int)param_1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + (int)param_1)" ( (binary_expression "param_4 + (int)param_1" identifier + (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (do_statement "do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));" do (compound_statement "{\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      }" { (expression_statement "param_1 = (uint *)((int)param_1 + 1);" (assignment_expression "param_1 = (uint *)((int)param_1 + 1)" identifier = (cast_expression "(uint *)((int)param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 1)" ( (binary_expression "(int)param_1 + 1" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }" if (parenthesized_expression "(puVar3 == param_1)" ( (binary_expression "puVar3 == param_1" identifier == identifier) )) (compound_statement "{\n          return (uint *)0x0;\n        }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) while (parenthesized_expression "((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2))" ( (binary_expression "(*(char *)param_1 != param_3) && (*(char *)param_1 != param_2)" (parenthesized_expression "(*(char *)param_1 != param_3)" ( (binary_expression "*(char *)param_1 != param_3" (pointer_expression "*(char *)param_1" * (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != identifier) )) && (parenthesized_expression "(*(char *)param_1 != param_2)" ( (binary_expression "*(char *)param_1 != param_2" (pointer_expression "*(char *)param_1" * (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != identifier) ))) )) ;) })) }) (else_clause "else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" else (compound_statement "{\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" { (expression_statement "cVar1 = (char)*param_1;" (assignment_expression "cVar1 = (char)*param_1" identifier = (cast_expression "(char)*param_1" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*param_1" * identifier))) ;) (while_statement "while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }" while (parenthesized_expression "((cVar1 != param_3 && (cVar1 != param_2)))" ( (parenthesized_expression "(cVar1 != param_3 && (cVar1 != param_2))" ( (binary_expression "cVar1 != param_3 && (cVar1 != param_2)" (binary_expression "cVar1 != param_3" identifier != identifier) && (parenthesized_expression "(cVar1 != param_2)" ( (binary_expression "cVar1 != param_2" identifier != identifier) ))) )) )) (compound_statement "{\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }" { (expression_statement "param_1 = (uint *)((int)param_1 + 1);" (assignment_expression "param_1 = (uint *)((int)param_1 + 1)" identifier = (cast_expression "(uint *)((int)param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 1)" ( (binary_expression "(int)param_1 + 1" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "param_4 = param_4 - 1;" (assignment_expression "param_4 = param_4 - 1" identifier = (binary_expression "param_4 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;" if (parenthesized_expression "((param_4 == 0) || (((uint)param_1 & 3) == 0))" ( (binary_expression "(param_4 == 0) || (((uint)param_1 & 3) == 0)" (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) || (parenthesized_expression "(((uint)param_1 & 3) == 0)" ( (binary_expression "((uint)param_1 & 3) == 0" (parenthesized_expression "((uint)param_1 & 3)" ( (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_0002b543;" goto statement_identifier ;)) (expression_statement "cVar1 = *(char *)param_1;" (assignment_expression "cVar1 = *(char *)param_1" identifier = (pointer_expression "*(char *)param_1" * (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) })) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid * memchr2(void *s,int c1_in,int c2_in,size_t n)\n\n{\n  char cVar1;\n  void *pvVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  \n  if ((char)c1_in == (char)c2_in) {\n    pvVar2 = rpl_memchr(s,c1_in & 0xff,n);\n    return pvVar2;\n  }\n  if ((n == 0) || (((uint)s & 3) == 0)) {\nLAB_0002b543:\n    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;\n    uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;\n    uVar6 = uVar6 << 0x10 | uVar6;\n    uVar3 = uVar3 << 0x10 | uVar3;\n    if (n < 4) {\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }\n    else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }\n                    /* WARNING: Load size is inaccurate */\n    if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }\n  }\n  else {\n                    /* WARNING: Load size is inaccurate */\n    cVar1 = *s;\n    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }\n  }\n  return s;\n}\n\n" comment (function_definition "void * memchr2(void *s,int c1_in,int c2_in,size_t n)\n\n{\n  char cVar1;\n  void *pvVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  \n  if ((char)c1_in == (char)c2_in) {\n    pvVar2 = rpl_memchr(s,c1_in & 0xff,n);\n    return pvVar2;\n  }\n  if ((n == 0) || (((uint)s & 3) == 0)) {\nLAB_0002b543:\n    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;\n    uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;\n    uVar6 = uVar6 << 0x10 | uVar6;\n    uVar3 = uVar3 << 0x10 | uVar3;\n    if (n < 4) {\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }\n    else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }\n                    /* WARNING: Load size is inaccurate */\n    if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }\n  }\n  else {\n                    /* WARNING: Load size is inaccurate */\n    cVar1 = *s;\n    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }\n  }\n  return s;\n}" primitive_type (pointer_declarator "* memchr2(void *s,int c1_in,int c2_in,size_t n)" * (function_declarator "memchr2(void *s,int c1_in,int c2_in,size_t n)" identifier (parameter_list "(void *s,int c1_in,int c2_in,size_t n)" ( (parameter_declaration "void *s" primitive_type (pointer_declarator "*s" * identifier)) , (parameter_declaration "int c1_in" primitive_type identifier) , (parameter_declaration "int c2_in" primitive_type identifier) , (parameter_declaration "size_t n" primitive_type identifier) )))) (compound_statement "{\n  char cVar1;\n  void *pvVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  \n  if ((char)c1_in == (char)c2_in) {\n    pvVar2 = rpl_memchr(s,c1_in & 0xff,n);\n    return pvVar2;\n  }\n  if ((n == 0) || (((uint)s & 3) == 0)) {\nLAB_0002b543:\n    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;\n    uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;\n    uVar6 = uVar6 << 0x10 | uVar6;\n    uVar3 = uVar3 << 0x10 | uVar3;\n    if (n < 4) {\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }\n    else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }\n                    /* WARNING: Load size is inaccurate */\n    if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }\n  }\n  else {\n                    /* WARNING: Load size is inaccurate */\n    cVar1 = *s;\n    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }\n  }\n  return s;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "void *pvVar2;" primitive_type (pointer_declarator "*pvVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (if_statement "if ((char)c1_in == (char)c2_in) {\n    pvVar2 = rpl_memchr(s,c1_in & 0xff,n);\n    return pvVar2;\n  }" if (parenthesized_expression "((char)c1_in == (char)c2_in)" ( (binary_expression "(char)c1_in == (char)c2_in" (cast_expression "(char)c1_in" ( (type_descriptor "char" primitive_type) ) identifier) == (cast_expression "(char)c2_in" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n    pvVar2 = rpl_memchr(s,c1_in & 0xff,n);\n    return pvVar2;\n  }" { (expression_statement "pvVar2 = rpl_memchr(s,c1_in & 0xff,n);" (assignment_expression "pvVar2 = rpl_memchr(s,c1_in & 0xff,n)" identifier = (call_expression "rpl_memchr(s,c1_in & 0xff,n)" identifier (argument_list "(s,c1_in & 0xff,n)" ( identifier , (binary_expression "c1_in & 0xff" identifier & number_literal) , identifier )))) ;) (return_statement "return pvVar2;" return identifier ;) })) (if_statement "if ((n == 0) || (((uint)s & 3) == 0)) {\nLAB_0002b543:\n    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;\n    uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;\n    uVar6 = uVar6 << 0x10 | uVar6;\n    uVar3 = uVar3 << 0x10 | uVar3;\n    if (n < 4) {\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }\n    else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }\n                    /* WARNING: Load size is inaccurate */\n    if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }\n  }\n  else {\n                    /* WARNING: Load size is inaccurate */\n    cVar1 = *s;\n    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }\n  }" if (parenthesized_expression "((n == 0) || (((uint)s & 3) == 0))" ( (binary_expression "(n == 0) || (((uint)s & 3) == 0)" (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) || (parenthesized_expression "(((uint)s & 3) == 0)" ( (binary_expression "((uint)s & 3) == 0" (parenthesized_expression "((uint)s & 3)" ( (binary_expression "(uint)s & 3" (cast_expression "(uint)s" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\nLAB_0002b543:\n    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;\n    uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;\n    uVar6 = uVar6 << 0x10 | uVar6;\n    uVar3 = uVar3 << 0x10 | uVar3;\n    if (n < 4) {\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }\n    else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }\n                    /* WARNING: Load size is inaccurate */\n    if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }\n  }" { (labeled_statement "LAB_0002b543:\n    uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;" statement_identifier : (expression_statement "uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU;" (assignment_expression "uVar6 = (c1_in & 0xffU) << 8 | c1_in & 0xffU" identifier = (binary_expression "(c1_in & 0xffU) << 8 | c1_in & 0xffU" (binary_expression "(c1_in & 0xffU) << 8" (parenthesized_expression "(c1_in & 0xffU)" ( (binary_expression "c1_in & 0xffU" identifier & number_literal) )) << number_literal) | (binary_expression "c1_in & 0xffU" identifier & number_literal))) ;)) (expression_statement "uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU;" (assignment_expression "uVar3 = (c2_in & 0xffU) << 8 | c2_in & 0xffU" identifier = (binary_expression "(c2_in & 0xffU) << 8 | c2_in & 0xffU" (binary_expression "(c2_in & 0xffU) << 8" (parenthesized_expression "(c2_in & 0xffU)" ( (binary_expression "c2_in & 0xffU" identifier & number_literal) )) << number_literal) | (binary_expression "c2_in & 0xffU" identifier & number_literal))) ;) (expression_statement "uVar6 = uVar6 << 0x10 | uVar6;" (assignment_expression "uVar6 = uVar6 << 0x10 | uVar6" identifier = (binary_expression "uVar6 << 0x10 | uVar6" (binary_expression "uVar6 << 0x10" identifier << number_literal) | identifier)) ;) (expression_statement "uVar3 = uVar3 << 0x10 | uVar3;" (assignment_expression "uVar3 = uVar3 << 0x10 | uVar3" identifier = (binary_expression "uVar3 << 0x10 | uVar3" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (n < 4) {\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }\n    else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }" if (parenthesized_expression "(n < 4)" ( (binary_expression "n < 4" identifier < number_literal) )) (compound_statement "{\nLAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }\n    }" { (labeled_statement "LAB_0002b5ff:\n      if (n == 0) {\n        return (void *)0x0;\n      }" statement_identifier : (if_statement "if (n == 0) {\n        return (void *)0x0;\n      }" if (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) (compound_statement "{\n        return (void *)0x0;\n      }" { (return_statement "return (void *)0x0;" return (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))) }) (else_clause "else {\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }" else (compound_statement "{\n                    /* WARNING: Load size is inaccurate */\n      uVar7 = uVar6 ^ *s;\n      uVar4 = *s ^ uVar3;\n      for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }\n    }" { comment (expression_statement "uVar7 = uVar6 ^ *s;" (assignment_expression "uVar7 = uVar6 ^ *s" identifier = (binary_expression "uVar6 ^ *s" identifier ^ (pointer_expression "*s" * identifier))) ;) (expression_statement "uVar4 = *s ^ uVar3;" (assignment_expression "uVar4 = *s ^ uVar3" identifier = (binary_expression "*s ^ uVar3" (pointer_expression "*s" * identifier) ^ identifier)) ;) (for_statement "for (uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7;\n          (uVar4 & 0x80808080) == 0;\n          uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7) {\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }" for ( (assignment_expression "uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7" identifier = (binary_expression "~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7" (binary_expression "~uVar4 & uVar4 + 0xfefefeff" (unary_expression "~uVar4" ~ identifier) & (binary_expression "uVar4 + 0xfefefeff" identifier + number_literal)) | (binary_expression "uVar7 + 0xfefefeff & ~uVar7" (binary_expression "uVar7 + 0xfefefeff" identifier + number_literal) & (unary_expression "~uVar7" ~ identifier)))) ; (binary_expression "(uVar4 & 0x80808080) == 0" (parenthesized_expression "(uVar4 & 0x80808080)" ( (binary_expression "uVar4 & 0x80808080" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar4 = ~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7" identifier = (binary_expression "~uVar4 & uVar4 + 0xfefefeff | uVar7 + 0xfefefeff & ~uVar7" (binary_expression "~uVar4 & uVar4 + 0xfefefeff" (unary_expression "~uVar4" ~ identifier) & (binary_expression "uVar4 + 0xfefefeff" identifier + number_literal)) | (binary_expression "uVar7 + 0xfefefeff & ~uVar7" (binary_expression "uVar7 + 0xfefefeff" identifier + number_literal) & (unary_expression "~uVar7" ~ identifier)))) ) (compound_statement "{\n        n = n - 4;\n        s = (void *)((int)s + 4);\n        if (n < 4) goto LAB_0002b5ff;\n                    /* WARNING: Load size is inaccurate */\n        uVar4 = *s ^ uVar3;\n        uVar7 = *s ^ uVar6;\n      }" { (expression_statement "n = n - 4;" (assignment_expression "n = n - 4" identifier = (binary_expression "n - 4" identifier - number_literal)) ;) (expression_statement "s = (void *)((int)s + 4);" (assignment_expression "s = (void *)((int)s + 4)" identifier = (cast_expression "(void *)((int)s + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)s + 4)" ( (binary_expression "(int)s + 4" (cast_expression "(int)s" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (n < 4) goto LAB_0002b5ff;" if (parenthesized_expression "(n < 4)" ( (binary_expression "n < 4" identifier < number_literal) )) (goto_statement "goto LAB_0002b5ff;" goto statement_identifier ;)) comment (expression_statement "uVar4 = *s ^ uVar3;" (assignment_expression "uVar4 = *s ^ uVar3" identifier = (binary_expression "*s ^ uVar3" (pointer_expression "*s" * identifier) ^ identifier)) ;) (expression_statement "uVar7 = *s ^ uVar6;" (assignment_expression "uVar7 = *s ^ uVar6" identifier = (binary_expression "*s ^ uVar6" (pointer_expression "*s" * identifier) ^ identifier)) ;) })) }))) comment (if_statement "if (((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)) {\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }" if (parenthesized_expression "(((char)*s != (char)c2_in) && ((char)*s != (char)c1_in))" ( (binary_expression "((char)*s != (char)c2_in) && ((char)*s != (char)c1_in)" (parenthesized_expression "((char)*s != (char)c2_in)" ( (binary_expression "(char)*s != (char)c2_in" (cast_expression "(char)*s" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*s" * identifier)) != (cast_expression "(char)c2_in" ( (type_descriptor "char" primitive_type) ) identifier)) )) && (parenthesized_expression "((char)*s != (char)c1_in)" ( (binary_expression "(char)*s != (char)c1_in" (cast_expression "(char)*s" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*s" * identifier)) != (cast_expression "(char)c1_in" ( (type_descriptor "char" primitive_type) ) identifier)) ))) )) (compound_statement "{\n      puVar5 = (uint *)(n + (int)s);\n      do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));\n    }" { (expression_statement "puVar5 = (uint *)(n + (int)s);" (assignment_expression "puVar5 = (uint *)(n + (int)s)" identifier = (cast_expression "(uint *)(n + (int)s)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(n + (int)s)" ( (binary_expression "n + (int)s" identifier + (cast_expression "(int)s" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (do_statement "do {\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      } while ((*s != (char)c2_in) && (*s != (char)c1_in));" do (compound_statement "{\n        s = (void *)((int)s + 1);\n        if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }\n                    /* WARNING: Load size is inaccurate */\n      }" { (expression_statement "s = (void *)((int)s + 1);" (assignment_expression "s = (void *)((int)s + 1)" identifier = (cast_expression "(void *)((int)s + 1)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)s + 1)" ( (binary_expression "(int)s + 1" (cast_expression "(int)s" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (puVar5 == (uint *)s) {\n          return (void *)0x0;\n        }" if (parenthesized_expression "(puVar5 == (uint *)s)" ( (binary_expression "puVar5 == (uint *)s" identifier == (cast_expression "(uint *)s" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n          return (void *)0x0;\n        }" { (return_statement "return (void *)0x0;" return (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) comment }) while (parenthesized_expression "((*s != (char)c2_in) && (*s != (char)c1_in))" ( (binary_expression "(*s != (char)c2_in) && (*s != (char)c1_in)" (parenthesized_expression "(*s != (char)c2_in)" ( (binary_expression "*s != (char)c2_in" (pointer_expression "*s" * identifier) != (cast_expression "(char)c2_in" ( (type_descriptor "char" primitive_type) ) identifier)) )) && (parenthesized_expression "(*s != (char)c1_in)" ( (binary_expression "*s != (char)c1_in" (pointer_expression "*s" * identifier) != (cast_expression "(char)c1_in" ( (type_descriptor "char" primitive_type) ) identifier)) ))) )) ;) })) }) (else_clause "else {\n                    /* WARNING: Load size is inaccurate */\n    cVar1 = *s;\n    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }\n  }" else (compound_statement "{\n                    /* WARNING: Load size is inaccurate */\n    cVar1 = *s;\n    while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }\n  }" { comment (expression_statement "cVar1 = *s;" (assignment_expression "cVar1 = *s" identifier = (pointer_expression "*s" * identifier)) ;) (while_statement "while ((cVar1 != (char)c2_in && (cVar1 != (char)c1_in))) {\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }" while (parenthesized_expression "((cVar1 != (char)c2_in && (cVar1 != (char)c1_in)))" ( (parenthesized_expression "(cVar1 != (char)c2_in && (cVar1 != (char)c1_in))" ( (binary_expression "cVar1 != (char)c2_in && (cVar1 != (char)c1_in)" (binary_expression "cVar1 != (char)c2_in" identifier != (cast_expression "(char)c2_in" ( (type_descriptor "char" primitive_type) ) identifier)) && (parenthesized_expression "(cVar1 != (char)c1_in)" ( (binary_expression "cVar1 != (char)c1_in" identifier != (cast_expression "(char)c1_in" ( (type_descriptor "char" primitive_type) ) identifier)) ))) )) )) (compound_statement "{\n      s = (void *)((int)s + 1);\n      n = n - 1;\n      if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;\n                    /* WARNING: Load size is inaccurate */\n      cVar1 = *s;\n    }" { (expression_statement "s = (void *)((int)s + 1);" (assignment_expression "s = (void *)((int)s + 1)" identifier = (cast_expression "(void *)((int)s + 1)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)s + 1)" ( (binary_expression "(int)s + 1" (cast_expression "(int)s" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "n = n - 1;" (assignment_expression "n = n - 1" identifier = (binary_expression "n - 1" identifier - number_literal)) ;) (if_statement "if ((n == 0) || (((uint)s & 3) == 0)) goto LAB_0002b543;" if (parenthesized_expression "((n == 0) || (((uint)s & 3) == 0))" ( (binary_expression "(n == 0) || (((uint)s & 3) == 0)" (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) || (parenthesized_expression "(((uint)s & 3) == 0)" ( (binary_expression "((uint)s & 3) == 0" (parenthesized_expression "((uint)s & 3)" ( (binary_expression "(uint)s & 3" (cast_expression "(uint)s" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_0002b543;" goto statement_identifier ;)) comment (expression_statement "cVar1 = *s;" (assignment_expression "cVar1 = *s" identifier = (pointer_expression "*s" * identifier)) ;) })) }))) (return_statement "return s;" return identifier ;) })))
(translation_unit "uint * FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)\n\n{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}\n\n" (function_definition "uint * FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)\n\n{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}" type_identifier (pointer_declarator "* FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)" * (function_declarator "FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)" identifier (parameter_list "(uint *param_1,char param_2,char param_3,uint param_4)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char param_2" primitive_type identifier) , (parameter_declaration "char param_3" primitive_type identifier) , (parameter_declaration "uint param_4" type_identifier identifier) )))) (compound_statement "{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (if_statement "if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }" if (parenthesized_expression "(param_2 == param_3)" ( (binary_expression "param_2 == param_3" identifier == identifier) )) (compound_statement "{\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }" { (expression_statement "puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);" (assignment_expression "puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4)" identifier = (cast_expression "(uint *)FUN_00036f10(param_1,param_2,param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00036f10(param_1,param_2,param_4)" identifier (argument_list "(param_1,param_2,param_4)" ( identifier , identifier , identifier ))))) ;) (return_statement "return puVar3;" return identifier ;) })) (if_statement "if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" if (parenthesized_expression "((param_4 == 0) || (((uint)param_1 & 3) == 0))" ( (binary_expression "(param_4 == 0) || (((uint)param_1 & 3) == 0)" (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) || (parenthesized_expression "(((uint)param_1 & 3) == 0)" ( (binary_expression "((uint)param_1 & 3) == 0" (parenthesized_expression "((uint)param_1 & 3)" ( (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }" { (labeled_statement "LAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));" statement_identifier : (expression_statement "uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));" (assignment_expression "uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" identifier = (call_expression "CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" identifier (argument_list "(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" ( (call_expression "CONCAT11(param_2,param_2)" identifier (argument_list "(param_2,param_2)" ( identifier , identifier ))) , (call_expression "CONCAT11(param_2,param_2)" identifier (argument_list "(param_2,param_2)" ( identifier , identifier ))) )))) ;)) (expression_statement "uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));" (assignment_expression "uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" identifier = (call_expression "CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" identifier (argument_list "(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" ( (call_expression "CONCAT11(param_3,param_3)" identifier (argument_list "(param_3,param_3)" ( identifier , identifier ))) , (call_expression "CONCAT11(param_3,param_3)" identifier (argument_list "(param_3,param_3)" ( identifier , identifier ))) )))) ;) (if_statement "if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" if (parenthesized_expression "(param_4 < 4)" ( (binary_expression "param_4 < 4" identifier < number_literal) )) (compound_statement "{\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }" { (labeled_statement "LAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }" statement_identifier : (if_statement "if (param_4 == 0) {\n        return (uint *)0x0;\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        return (uint *)0x0;\n      }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))) }) (else_clause "else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" else (compound_statement "{\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" { (expression_statement "uVar6 = uVar5 ^ *param_1;" (assignment_expression "uVar6 = uVar5 ^ *param_1" identifier = (binary_expression "uVar5 ^ *param_1" identifier ^ (pointer_expression "*param_1" * identifier))) ;) (expression_statement "uVar2 = *param_1 ^ uVar4;" (assignment_expression "uVar2 = *param_1 ^ uVar4" identifier = (binary_expression "*param_1 ^ uVar4" (pointer_expression "*param_1" * identifier) ^ identifier)) ;) (for_statement "for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }" for ( (assignment_expression "uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" identifier = (binary_expression "~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (binary_expression "~uVar2 & uVar2 + 0xfefefeff" (unary_expression "~uVar2" ~ identifier) & (binary_expression "uVar2 + 0xfefefeff" identifier + number_literal)) | (binary_expression "uVar6 + 0xfefefeff & ~uVar6" (binary_expression "uVar6 + 0xfefefeff" identifier + number_literal) & (unary_expression "~uVar6" ~ identifier)))) ; (binary_expression "(uVar2 & 0x80808080) == 0" (parenthesized_expression "(uVar2 & 0x80808080)" ( (binary_expression "uVar2 & 0x80808080" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" identifier = (binary_expression "~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (binary_expression "~uVar2 & uVar2 + 0xfefefeff" (unary_expression "~uVar2" ~ identifier) & (binary_expression "uVar2 + 0xfefefeff" identifier + number_literal)) | (binary_expression "uVar6 + 0xfefefeff & ~uVar6" (binary_expression "uVar6 + 0xfefefeff" identifier + number_literal) & (unary_expression "~uVar6" ~ identifier)))) ) (compound_statement "{\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }" { (expression_statement "param_4 = param_4 - 4;" (assignment_expression "param_4 = param_4 - 4" identifier = (binary_expression "param_4 - 4" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (param_4 < 4) goto LAB_0002b5ff;" if (parenthesized_expression "(param_4 < 4)" ( (binary_expression "param_4 < 4" identifier < number_literal) )) (goto_statement "goto LAB_0002b5ff;" goto statement_identifier ;)) (expression_statement "uVar2 = *param_1 ^ uVar4;" (assignment_expression "uVar2 = *param_1 ^ uVar4" identifier = (binary_expression "*param_1 ^ uVar4" (pointer_expression "*param_1" * identifier) ^ identifier)) ;) (expression_statement "uVar6 = *param_1 ^ uVar5;" (assignment_expression "uVar6 = *param_1 ^ uVar5" identifier = (binary_expression "*param_1 ^ uVar5" (pointer_expression "*param_1" * identifier) ^ identifier)) ;) })) }))) (if_statement "if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }" if (parenthesized_expression "(((char)*param_1 != param_3) && ((char)*param_1 != param_2))" ( (binary_expression "((char)*param_1 != param_3) && ((char)*param_1 != param_2)" (parenthesized_expression "((char)*param_1 != param_3)" ( (binary_expression "(char)*param_1 != param_3" (cast_expression "(char)*param_1" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*param_1" * identifier)) != identifier) )) && (parenthesized_expression "((char)*param_1 != param_2)" ( (binary_expression "(char)*param_1 != param_2" (cast_expression "(char)*param_1" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*param_1" * identifier)) != identifier) ))) )) (compound_statement "{\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }" { (expression_statement "puVar3 = (uint *)(param_4 + (int)param_1);" (assignment_expression "puVar3 = (uint *)(param_4 + (int)param_1)" identifier = (cast_expression "(uint *)(param_4 + (int)param_1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + (int)param_1)" ( (binary_expression "param_4 + (int)param_1" identifier + (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (do_statement "do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));" do (compound_statement "{\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      }" { (expression_statement "param_1 = (uint *)((int)param_1 + 1);" (assignment_expression "param_1 = (uint *)((int)param_1 + 1)" identifier = (cast_expression "(uint *)((int)param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 1)" ( (binary_expression "(int)param_1 + 1" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }" if (parenthesized_expression "(puVar3 == param_1)" ( (binary_expression "puVar3 == param_1" identifier == identifier) )) (compound_statement "{\n          return (uint *)0x0;\n        }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) while (parenthesized_expression "((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2))" ( (binary_expression "(*(char *)param_1 != param_3) && (*(char *)param_1 != param_2)" (parenthesized_expression "(*(char *)param_1 != param_3)" ( (binary_expression "*(char *)param_1 != param_3" (pointer_expression "*(char *)param_1" * (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != identifier) )) && (parenthesized_expression "(*(char *)param_1 != param_2)" ( (binary_expression "*(char *)param_1 != param_2" (pointer_expression "*(char *)param_1" * (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != identifier) ))) )) ;) })) }) (else_clause "else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" else (compound_statement "{\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" { (expression_statement "cVar1 = (char)*param_1;" (assignment_expression "cVar1 = (char)*param_1" identifier = (cast_expression "(char)*param_1" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*param_1" * identifier))) ;) (while_statement "while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }" while (parenthesized_expression "((cVar1 != param_3 && (cVar1 != param_2)))" ( (parenthesized_expression "(cVar1 != param_3 && (cVar1 != param_2))" ( (binary_expression "cVar1 != param_3 && (cVar1 != param_2)" (binary_expression "cVar1 != param_3" identifier != identifier) && (parenthesized_expression "(cVar1 != param_2)" ( (binary_expression "cVar1 != param_2" identifier != identifier) ))) )) )) (compound_statement "{\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }" { (expression_statement "param_1 = (uint *)((int)param_1 + 1);" (assignment_expression "param_1 = (uint *)((int)param_1 + 1)" identifier = (cast_expression "(uint *)((int)param_1 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 1)" ( (binary_expression "(int)param_1 + 1" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "param_4 = param_4 - 1;" (assignment_expression "param_4 = param_4 - 1" identifier = (binary_expression "param_4 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;" if (parenthesized_expression "((param_4 == 0) || (((uint)param_1 & 3) == 0))" ( (binary_expression "(param_4 == 0) || (((uint)param_1 & 3) == 0)" (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) || (parenthesized_expression "(((uint)param_1 & 3) == 0)" ( (binary_expression "((uint)param_1 & 3) == 0" (parenthesized_expression "((uint)param_1 & 3)" ( (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_0002b543;" goto statement_identifier ;)) (expression_statement "cVar1 = *(char *)param_1;" (assignment_expression "cVar1 = *(char *)param_1" identifier = (pointer_expression "*(char *)param_1" * (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) })) }))) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (call_expression IDENT (argument_list ( IDENT , IDENT ))) , (call_expression IDENT (argument_list ( IDENT , IDENT ))) )))) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (call_expression IDENT (argument_list ( IDENT , IDENT ))) , (call_expression IDENT (argument_list ( IDENT , IDENT ))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) ^ IDENT)) ;) (for_statement for ( (assignment_expression IDENT = (binary_expression (binary_expression (unary_expression ~ IDENT) & (binary_expression IDENT + LIT)) | (binary_expression (binary_expression IDENT + LIT) & (unary_expression ~ IDENT)))) ; (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ; (assignment_expression IDENT = (binary_expression (binary_expression (unary_expression ~ IDENT) & (binary_expression IDENT + LIT)) | (binary_expression (binary_expression IDENT + LIT) & (unary_expression ~ IDENT)))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) ^ IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) ^ IDENT)) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) != IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) != IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) != IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) != IDENT) ))) )) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != IDENT) && (parenthesized_expression ( (binary_expression IDENT != IDENT) ))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) })) }))) (return_statement return IDENT ;) })))
(function_definition "uint * FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)\n\n{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}" (type_identifier "uint") (pointer_declarator "* FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)" (* "*") (function_declarator "FUN_0002b4d0(uint *param_1,char param_2,char param_3,uint param_4)" (identifier "FUN_0002b4d0") (parameter_list "(uint *param_1,char param_2,char param_3,uint param_4)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "char param_2" (primitive_type "char") (identifier "param_2")) (, ",") (parameter_declaration "char param_3" (primitive_type "char") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")")))) (compound_statement "{\n  char cVar1;\n  uint uVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  \n  if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }\n  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }\n  return param_1;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (if_statement "if (param_2 == param_3) {\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }" (if "if") (parenthesized_expression "(param_2 == param_3)" (( "(") (binary_expression "param_2 == param_3" (identifier "param_2") (== "==") (identifier "param_3")) () ")")) (compound_statement "{\n    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);\n    return puVar3;\n  }" ({ "{") (expression_statement "puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);" (assignment_expression "puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4)" (identifier "puVar3") (= "=") (cast_expression "(uint *)FUN_00036f10(param_1,param_2,param_4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00036f10(param_1,param_2,param_4)" (identifier "FUN_00036f10") (argument_list "(param_1,param_2,param_4)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_4") () ")"))))) (; ";")) (return_statement "return puVar3;" (return "return") (identifier "puVar3") (; ";")) (} "}"))) (if_statement "if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }\n  else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" (if "if") (parenthesized_expression "((param_4 == 0) || (((uint)param_1 & 3) == 0))" (( "(") (binary_expression "(param_4 == 0) || (((uint)param_1 & 3) == 0)" (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(((uint)param_1 & 3) == 0)" (( "(") (binary_expression "((uint)param_1 & 3) == 0" (parenthesized_expression "((uint)param_1 & 3)" (( "(") (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_1")) (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\nLAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));\n    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));\n    if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }\n    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }\n  }" ({ "{") (labeled_statement "LAB_0002b543:\n    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));" (statement_identifier "LAB_0002b543") (: ":") (expression_statement "uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));" (assignment_expression "uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" (identifier "uVar5") (= "=") (call_expression "CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" (identifier "CONCAT22") (argument_list "(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2))" (( "(") (call_expression "CONCAT11(param_2,param_2)" (identifier "CONCAT11") (argument_list "(param_2,param_2)" (( "(") (identifier "param_2") (, ",") (identifier "param_2") () ")"))) (, ",") (call_expression "CONCAT11(param_2,param_2)" (identifier "CONCAT11") (argument_list "(param_2,param_2)" (( "(") (identifier "param_2") (, ",") (identifier "param_2") () ")"))) () ")")))) (; ";"))) (expression_statement "uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));" (assignment_expression "uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" (identifier "uVar4") (= "=") (call_expression "CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" (identifier "CONCAT22") (argument_list "(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3))" (( "(") (call_expression "CONCAT11(param_3,param_3)" (identifier "CONCAT11") (argument_list "(param_3,param_3)" (( "(") (identifier "param_3") (, ",") (identifier "param_3") () ")"))) (, ",") (call_expression "CONCAT11(param_3,param_3)" (identifier "CONCAT11") (argument_list "(param_3,param_3)" (( "(") (identifier "param_3") (, ",") (identifier "param_3") () ")"))) () ")")))) (; ";")) (if_statement "if (param_4 < 4) {\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }\n    else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" (if "if") (parenthesized_expression "(param_4 < 4)" (( "(") (binary_expression "param_4 < 4" (identifier "param_4") (< "<") (number_literal "4")) () ")")) (compound_statement "{\nLAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }\n    }" ({ "{") (labeled_statement "LAB_0002b5ff:\n      if (param_4 == 0) {\n        return (uint *)0x0;\n      }" (statement_identifier "LAB_0002b5ff") (: ":") (if_statement "if (param_4 == 0) {\n        return (uint *)0x0;\n      }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return (uint *)0x0;\n      }" ({ "{") (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" (else "else") (compound_statement "{\n      uVar6 = uVar5 ^ *param_1;\n      uVar2 = *param_1 ^ uVar4;\n      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }\n    }" ({ "{") (expression_statement "uVar6 = uVar5 ^ *param_1;" (assignment_expression "uVar6 = uVar5 ^ *param_1" (identifier "uVar6") (= "=") (binary_expression "uVar5 ^ *param_1" (identifier "uVar5") (^ "^") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "uVar2 = *param_1 ^ uVar4;" (assignment_expression "uVar2 = *param_1 ^ uVar4" (identifier "uVar2") (= "=") (binary_expression "*param_1 ^ uVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (^ "^") (identifier "uVar4"))) (; ";")) (for_statement "for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;\n          (uVar2 & 0x80808080) == 0;\n          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }" (for "for") (( "(") (assignment_expression "uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (identifier "uVar2") (= "=") (binary_expression "~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (binary_expression "~uVar2 & uVar2 + 0xfefefeff" (unary_expression "~uVar2" (~ "~") (identifier "uVar2")) (& "&") (binary_expression "uVar2 + 0xfefefeff" (identifier "uVar2") (+ "+") (number_literal "0xfefefeff"))) (| "|") (binary_expression "uVar6 + 0xfefefeff & ~uVar6" (binary_expression "uVar6 + 0xfefefeff" (identifier "uVar6") (+ "+") (number_literal "0xfefefeff")) (& "&") (unary_expression "~uVar6" (~ "~") (identifier "uVar6"))))) (; ";") (binary_expression "(uVar2 & 0x80808080) == 0" (parenthesized_expression "(uVar2 & 0x80808080)" (( "(") (binary_expression "uVar2 & 0x80808080" (identifier "uVar2") (& "&") (number_literal "0x80808080")) () ")")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (identifier "uVar2") (= "=") (binary_expression "~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6" (binary_expression "~uVar2 & uVar2 + 0xfefefeff" (unary_expression "~uVar2" (~ "~") (identifier "uVar2")) (& "&") (binary_expression "uVar2 + 0xfefefeff" (identifier "uVar2") (+ "+") (number_literal "0xfefefeff"))) (| "|") (binary_expression "uVar6 + 0xfefefeff & ~uVar6" (binary_expression "uVar6 + 0xfefefeff" (identifier "uVar6") (+ "+") (number_literal "0xfefefeff")) (& "&") (unary_expression "~uVar6" (~ "~") (identifier "uVar6"))))) () ")") (compound_statement "{\n        param_4 = param_4 - 4;\n        param_1 = param_1 + 1;\n        if (param_4 < 4) goto LAB_0002b5ff;\n        uVar2 = *param_1 ^ uVar4;\n        uVar6 = *param_1 ^ uVar5;\n      }" ({ "{") (expression_statement "param_4 = param_4 - 4;" (assignment_expression "param_4 = param_4 - 4" (identifier "param_4") (= "=") (binary_expression "param_4 - 4" (identifier "param_4") (- "-") (number_literal "4"))) (; ";")) (expression_statement "param_1 = param_1 + 1;" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_4 < 4) goto LAB_0002b5ff;" (if "if") (parenthesized_expression "(param_4 < 4)" (( "(") (binary_expression "param_4 < 4" (identifier "param_4") (< "<") (number_literal "4")) () ")")) (goto_statement "goto LAB_0002b5ff;" (goto "goto") (statement_identifier "LAB_0002b5ff") (; ";"))) (expression_statement "uVar2 = *param_1 ^ uVar4;" (assignment_expression "uVar2 = *param_1 ^ uVar4" (identifier "uVar2") (= "=") (binary_expression "*param_1 ^ uVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (^ "^") (identifier "uVar4"))) (; ";")) (expression_statement "uVar6 = *param_1 ^ uVar5;" (assignment_expression "uVar6 = *param_1 ^ uVar5" (identifier "uVar6") (= "=") (binary_expression "*param_1 ^ uVar5" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (^ "^") (identifier "uVar5"))) (; ";")) (} "}"))) (} "}")))) (if_statement "if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }" (if "if") (parenthesized_expression "(((char)*param_1 != param_3) && ((char)*param_1 != param_2))" (( "(") (binary_expression "((char)*param_1 != param_3) && ((char)*param_1 != param_2)" (parenthesized_expression "((char)*param_1 != param_3)" (( "(") (binary_expression "(char)*param_1 != param_3" (cast_expression "(char)*param_1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (!= "!=") (identifier "param_3")) () ")")) (&& "&&") (parenthesized_expression "((char)*param_1 != param_2)" (( "(") (binary_expression "(char)*param_1 != param_2" (cast_expression "(char)*param_1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (!= "!=") (identifier "param_2")) () ")"))) () ")")) (compound_statement "{\n      puVar3 = (uint *)(param_4 + (int)param_1);\n      do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));\n    }" ({ "{") (expression_statement "puVar3 = (uint *)(param_4 + (int)param_1);" (assignment_expression "puVar3 = (uint *)(param_4 + (int)param_1)" (identifier "puVar3") (= "=") (cast_expression "(uint *)(param_4 + (int)param_1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + (int)param_1)" (( "(") (binary_expression "param_4 + (int)param_1" (identifier "param_4") (+ "+") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")")))) (; ";")) (do_statement "do {\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));" (do "do") (compound_statement "{\n        param_1 = (uint *)((int)param_1 + 1);\n        if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }\n      }" ({ "{") (expression_statement "param_1 = (uint *)((int)param_1 + 1);" (assignment_expression "param_1 = (uint *)((int)param_1 + 1)" (identifier "param_1") (= "=") (cast_expression "(uint *)((int)param_1 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 1)" (( "(") (binary_expression "(int)param_1 + 1" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if (puVar3 == param_1) {\n          return (uint *)0x0;\n        }" (if "if") (parenthesized_expression "(puVar3 == param_1)" (( "(") (binary_expression "puVar3 == param_1" (identifier "puVar3") (== "==") (identifier "param_1")) () ")")) (compound_statement "{\n          return (uint *)0x0;\n        }" ({ "{") (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2))" (( "(") (binary_expression "(*(char *)param_1 != param_3) && (*(char *)param_1 != param_2)" (parenthesized_expression "(*(char *)param_1 != param_3)" (( "(") (binary_expression "*(char *)param_1 != param_3" (pointer_expression "*(char *)param_1" (* "*") (cast_expression "(char *)param_1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1"))) (!= "!=") (identifier "param_3")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)param_1 != param_2)" (( "(") (binary_expression "*(char *)param_1 != param_2" (pointer_expression "*(char *)param_1" (* "*") (cast_expression "(char *)param_1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1"))) (!= "!=") (identifier "param_2")) () ")"))) () ")")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" (else "else") (compound_statement "{\n    cVar1 = (char)*param_1;\n    while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }\n  }" ({ "{") (expression_statement "cVar1 = (char)*param_1;" (assignment_expression "cVar1 = (char)*param_1" (identifier "cVar1") (= "=") (cast_expression "(char)*param_1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (while_statement "while ((cVar1 != param_3 && (cVar1 != param_2))) {\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }" (while "while") (parenthesized_expression "((cVar1 != param_3 && (cVar1 != param_2)))" (( "(") (parenthesized_expression "(cVar1 != param_3 && (cVar1 != param_2))" (( "(") (binary_expression "cVar1 != param_3 && (cVar1 != param_2)" (binary_expression "cVar1 != param_3" (identifier "cVar1") (!= "!=") (identifier "param_3")) (&& "&&") (parenthesized_expression "(cVar1 != param_2)" (( "(") (binary_expression "cVar1 != param_2" (identifier "cVar1") (!= "!=") (identifier "param_2")) () ")"))) () ")")) () ")")) (compound_statement "{\n      param_1 = (uint *)((int)param_1 + 1);\n      param_4 = param_4 - 1;\n      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;\n      cVar1 = *(char *)param_1;\n    }" ({ "{") (expression_statement "param_1 = (uint *)((int)param_1 + 1);" (assignment_expression "param_1 = (uint *)((int)param_1 + 1)" (identifier "param_1") (= "=") (cast_expression "(uint *)((int)param_1 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 1)" (( "(") (binary_expression "(int)param_1 + 1" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "param_4 = param_4 - 1;" (assignment_expression "param_4 = param_4 - 1" (identifier "param_4") (= "=") (binary_expression "param_4 - 1" (identifier "param_4") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;" (if "if") (parenthesized_expression "((param_4 == 0) || (((uint)param_1 & 3) == 0))" (( "(") (binary_expression "(param_4 == 0) || (((uint)param_1 & 3) == 0)" (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(((uint)param_1 & 3) == 0)" (( "(") (binary_expression "((uint)param_1 & 3) == 0" (parenthesized_expression "((uint)param_1 & 3)" (( "(") (binary_expression "(uint)param_1 & 3" (cast_expression "(uint)param_1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_1")) (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_0002b543;" (goto "goto") (statement_identifier "LAB_0002b543") (; ";"))) (expression_statement "cVar1 = *(char *)param_1;" (assignment_expression "cVar1 = *(char *)param_1" (identifier "cVar1") (= "=") (pointer_expression "*(char *)param_1" (* "*") (cast_expression "(char *)param_1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1")))) (; ";")) (} "}"))) (} "}")))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void * function_1(void *s,int var_2,int var_4,size_t var_3)

{
  char var_10;
  void *pvVar2;
  type_1 var_6;
  type_1 var_7;
  type_1 *var_9;
  type_1 var_5;
  type_1 var_8;
  
  if ((char)var_2 == (char)var_4) {
    pvVar2 = var_1(s,var_2 & 0xff,var_3);
    return pvVar2;
  }
  if ((var_3 == 0) || (((type_1)s & 3) == 0)) {
LAB_0002b543:
    var_5 = (var_2 & 0xffU) << 8 | var_2 & 0xffU;
    var_6 = (var_4 & 0xffU) << 8 | var_4 & 0xffU;
    var_5 = var_5 << 0x10 | var_5;
    var_6 = var_6 << 0x10 | var_6;
    if (var_3 < 4) {
LAB_0002b5ff:
      if (var_3 == 0) {
        return (void *)0x0;
      }
    }
    else {
                    /* WARNING: Load size is inaccurate */
      var_8 = var_5 ^ *s;
      var_7 = *s ^ var_6;
      for (var_7 = ~var_7 & var_7 + 0xfefefeff | var_8 + 0xfefefeff & ~var_8;
          (var_7 & 0x80808080) == 0;
          var_7 = ~var_7 & var_7 + 0xfefefeff | var_8 + 0xfefefeff & ~var_8) {
        var_3 = var_3 - 4;
        s = (void *)((int)s + 4);
        if (var_3 < 4) goto LAB_0002b5ff;
                    /* WARNING: Load size is inaccurate */
        var_7 = *s ^ var_6;
        var_8 = *s ^ var_5;
      }
    }
                    /* WARNING: Load size is inaccurate */
    if (((char)*s != (char)var_4) && ((char)*s != (char)var_2)) {
      var_9 = (type_1 *)(var_3 + (int)s);
      do {
        s = (void *)((int)s + 1);
        if (var_9 == (type_1 *)s) {
          return (void *)0x0;
        }
                    /* WARNING: Load size is inaccurate */
      } while ((*s != (char)var_4) && (*s != (char)var_2));
    }
  }
  else {
                    /* WARNING: Load size is inaccurate */
    var_10 = *s;
    while ((var_10 != (char)var_4 && (var_10 != (char)var_2))) {
      s = (void *)((int)s + 1);
      var_3 = var_3 - 1;
      if ((var_3 == 0) || (((type_1)s & 3) == 0)) goto LAB_0002b543;
                    /* WARNING: Load size is inaccurate */
      var_10 = *s;
    }
  }
  return s;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier))))) body: (compound_statement (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: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))) (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))) (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (for_statement initializer: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (unary_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (unary_expression argument: (identifier))))) condition: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (unary_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (unary_expression argument: (identifier))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (identifier))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))))) (while_statement condition: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))))))))) (return_statement (identifier)))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

uint * MASKED(uint *param_1,char param_2,char param_3,uint param_4)

{
  char cVar1;
  uint uVar2;
  uint *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  
  if (param_2 == param_3) {
    puVar3 = (uint *)FUN_00036f10(param_1,param_2,param_4);
    return puVar3;
  }
  if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) {
LAB_0002b543:
    uVar5 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));
    uVar4 = CONCAT22(CONCAT11(param_3,param_3),CONCAT11(param_3,param_3));
    if (param_4 < 4) {
LAB_0002b5ff:
      if (param_4 == 0) {
        return (uint *)0x0;
      }
    }
    else {
      uVar6 = uVar5 ^ *param_1;
      uVar2 = *param_1 ^ uVar4;
      for (uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6;
          (uVar2 & 0x80808080) == 0;
          uVar2 = ~uVar2 & uVar2 + 0xfefefeff | uVar6 + 0xfefefeff & ~uVar6) {
        param_4 = param_4 - 4;
        param_1 = param_1 + 1;
        if (param_4 < 4) goto LAB_0002b5ff;
        uVar2 = *param_1 ^ uVar4;
        uVar6 = *param_1 ^ uVar5;
      }
    }
    if (((char)*param_1 != param_3) && ((char)*param_1 != param_2)) {
      puVar3 = (uint *)(param_4 + (int)param_1);
      do {
        param_1 = (uint *)((int)param_1 + 1);
        if (puVar3 == param_1) {
          return (uint *)0x0;
        }
      } while ((*(char *)param_1 != param_3) && (*(char *)param_1 != param_2));
    }
  }
  else {
    cVar1 = (char)*param_1;
    while ((cVar1 != param_3 && (cVar1 != param_2))) {
      param_1 = (uint *)((int)param_1 + 1);
      param_4 = param_4 - 1;
      if ((param_4 == 0) || (((uint)param_1 & 3) == 0)) goto LAB_0002b543;
      cVar1 = *(char *)param_1;
    }
  }
  return param_1;
}

