{"type": "func", "start": 6442455984, "end": 6442456369, "name": "sub_1800013B0", "pseudocode": "// \n// sub_1800013B0 from 0x1800013b0 to 0x180001531 (385 bytes)\n// \n// 15 xrefs:\n// > sub_180006A40 @ 0x180006b49\n// > sub_180006A40 @ 0x180006bc9\n// > sub_180006A40 @ 0x180006bee\n// > sub_180006A40 @ 0x180006c0c\n// > sub_180006A40 @ 0x180006c35\n// > sub_180006A40 @ 0x180006c92\n// > sub_180006A40 @ 0x180006cb7\n// > sub_180006A40 @ 0x180006cdd\n// > sub_180006A40 @ 0x180006d37\n// > sub_180009770 @ 0x1800099a7\n// > sub_180009770 @ 0x180009c21\n// > <???> @ 0x18017d354\n// > <???> @ 0x18017d364\n// > <???> @ 0x18017d378\n// > <???> @ 0x1801f609c\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_1800013B0(__int64 a1, __int64 a2)\n{\n  __int64 v2; // rsi\n  _DWORD *v5; // rbx\n  unsigned int v6; // ecx\n  __int64 v7; // rax\n  __int64 v8; // rax\n  int v9; // ebp\n  unsigned int v10; // edx\n  unsigned int v11; // r9d\n  unsigned int v12; // r8d\n  __int64 v13; // r9\n  unsigned int v14; // r8d\n  char v15; // dl\n  unsigned int v16; // r8d\n  unsigned int v17; // ecx\n  unsigned int *v18; // rax\n  unsigned int v19; // ecx\n  int v20; // edx\n  int v21; // edx\n\n  v2 = *(_QWORD *)(a1 + 56);\n  v5 = *(_DWORD **)a2;\n  v6 = **(_DWORD **)a2 >> *(_DWORD *)(a2 + 16);\n  LODWORD(v7) = *(unsigned __int16 *)(*(_QWORD *)(a1 + 48) + 2LL * (v6 & *(_DWORD *)(a1 + 112)));\n  if ( (unsigned int)v7 >= 0x8000 )\n  {\n    v8 = v7 & 0x7FFF;\n    v9 = *(__int16 *)(a1 + 98);\n    v10 = __ROL4__(v6 & *(_DWORD *)(a1 + 104), 16);\n    v11 = (v10 << 8) ^ ((v10 << 8) ^ (v10 >> 8)) & 0xFF00FF;\n    v12 = (16 * v11) ^ ((16 * v11) ^ (v11 >> 4)) & 0xF0F0F0F;\n    v13 = *(_QWORD *)(a1 + 64);\n    v14 = (4 * v12) ^ ((4 * v12) ^ (v12 >> 2)) & 0x33333333;\n    v15 = v9 - v8;\n    v16 = (2 * v14) ^ ((2 * v14) ^ (v14 >> 1)) & 0x55555555;\n    v17 = v9 - v8;\n    v18 = (unsigned int *)(v13 + 4 * v8);\n    v19 = v17 >> 2;\n    if ( v19 )\n    {\n      while ( *v18 <= v16 )\n      {\n        if ( v18[1] > v16 )\n        {\n          v7 = ((__int64)v18 - v13 + 4) >> 2;\n          goto LABEL_12;\n        }\n        if ( v18[2] > v16 )\n        {\n          v7 = ((__int64)v18 - v13 + 8) >> 2;\n          goto LABEL_12;\n        }\n        if ( v18[3] > v16 )\n        {\n          v7 = ((__int64)v18 - v13 + 12) >> 2;\n          goto LABEL_12;\n        }\n        v18 += 4;\n        if ( !--v19 )\n          goto LABEL_8;\n      }\n      goto LABEL_16;\n    }\nLABEL_8:\n    v20 = v15 & 3;\n    if ( v20 )\n    {\n      while ( *v18 <= v16 )\n      {\n        ++v18;\n        if ( !--v20 )\n          goto LABEL_11;\n      }\nLABEL_16:\n      v7 = ((__int64)v18 - v13) >> 2;\n      goto LABEL_12;\n    }\nLABEL_11:\n    LODWORD(v7) = *(__int16 *)(a1 + 98);\n  }\nLABEL_12:\n  v21 = *(_DWORD *)(a2 + 16) + *(char *)((v7 & 0x7FFF) + v2);\n  *(_DWORD *)(a2 + 16) = (*(_BYTE *)(a2 + 16) + *(_BYTE *)((v7 & 0x7FFF) + v2)) & 7;\n  *(_QWORD *)a2 = (char *)v5 + ((__int64)v21 >> 3);\n  return (unsigned int)*(__int16 *)(*(_QWORD *)(a1 + 80) + 2LL * (unsigned int)(v7 - 1));\n}", "assembly": "; \n; sub_1800013B0 from 0x1800013b0 to 0x180001531 (385 bytes)\n; \n; 15 xrefs:\n; > sub_180006A40 @ 0x180006b49\n; > sub_180006A40 @ 0x180006bc9\n; > sub_180006A40 @ 0x180006bee\n; > sub_180006A40 @ 0x180006c0c\n; > sub_180006A40 @ 0x180006c35\n; > sub_180006A40 @ 0x180006c92\n; > sub_180006A40 @ 0x180006cb7\n; > sub_180006A40 @ 0x180006cdd\n; > sub_180006A40 @ 0x180006d37\n; > sub_180009770 @ 0x1800099a7\n; > sub_180009770 @ 0x180009c21\n; > <???> @ 0x18017d354\n; > <???> @ 0x18017d364\n; > <???> @ 0x18017d378\n; > <???> @ 0x1801f609c\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     [rsp+arg_8], rbx                                               ; +0x0, 0x1800013b0\npush    rsi                                                            ; +0x5, 0x1800013b5\nmov     rsi, [rcx+38h]                                                 ; +0x6, 0x1800013b6\nmov     r10, rcx                                                       ; +0xa, 0x1800013ba\nmov     ecx, [rdx+10h]                                                 ; +0xd, 0x1800013bd\nmov     r11, rdx                                                       ; +0x10, 0x1800013c0\nmov     rbx, [rdx]                                                     ; +0x13, 0x1800013c3\nmov     r8d, [r10+70h]                                                 ; +0x16, 0x1800013c6\nmov     eax, [rbx]                                                     ; +0x1a, 0x1800013ca\nshr     eax, cl                                                        ; +0x1c, 0x1800013cc\nmov     ecx, eax                                                       ; +0x1e, 0x1800013ce\nmov     rax, [r10+30h]                                                 ; +0x20, 0x1800013d0\nand     r8, rcx                                                        ; +0x24, 0x1800013d4\nmovzx   eax, word ptr [rax+r8*2]                                       ; +0x27, 0x1800013d7\ncmp     eax, 8000h                                                     ; +0x2c, 0x1800013dc\njb      loc_1800014C9                                                  ; +0x31, 0x1800013e1\nmov     edx, [r10+68h]                                                 ; +0x37, 0x1800013e7\nand     eax, 7FFFh                                                     ; +0x3b, 0x1800013eb\nand     edx, ecx                                                       ; +0x40, 0x1800013f0\nmov     [rsp+8+arg_0], rbp                                             ; +0x42, 0x1800013f2\nmovsx   ebp, word ptr [r10+62h]                                        ; +0x47, 0x1800013f7\nrol     edx, 10h                                                       ; +0x4c, 0x1800013fc\nmov     r9d, edx                                                       ; +0x4f, 0x1800013ff\nmov     ecx, edx                                                       ; +0x52, 0x180001402\nshl     ecx, 8                                                         ; +0x54, 0x180001404\nshl     edx, 8                                                         ; +0x57, 0x180001407\nshr     r9d, 8                                                         ; +0x5a, 0x18000140a\nxor     r9d, ecx                                                       ; +0x5e, 0x18000140e\nand     r9d, 0FF00FFh                                                  ; +0x61, 0x180001411\nxor     r9d, edx                                                       ; +0x68, 0x180001418\nmov     r8d, r9d                                                       ; +0x6b, 0x18000141b\nmov     ecx, r9d                                                       ; +0x6e, 0x18000141e\nshr     r8d, 4                                                         ; +0x71, 0x180001421\nshl     ecx, 4                                                         ; +0x75, 0x180001425\nxor     r8d, ecx                                                       ; +0x78, 0x180001428\nshl     r9d, 4                                                         ; +0x7b, 0x18000142b\nand     r8d, 0F0F0F0Fh                                                 ; +0x7f, 0x18000142f\nxor     r8d, r9d                                                       ; +0x86, 0x180001436\nmov     r9, [r10+40h]                                                  ; +0x89, 0x180001439\nmov     edx, r8d                                                       ; +0x8d, 0x18000143d\nshr     edx, 2                                                         ; +0x90, 0x180001440\nlea     ecx, ds:0[r8*4]                                                ; +0x93, 0x180001443\nxor     edx, ecx                                                       ; +0x9b, 0x18000144b\nlea     ecx, ds:0[r8*4]                                                ; +0x9d, 0x18000144d\nand     edx, 33333333h                                                 ; +0xa5, 0x180001455\nxor     edx, ecx                                                       ; +0xab, 0x18000145b\nmov     r8d, edx                                                       ; +0xad, 0x18000145d\nshr     r8d, 1                                                         ; +0xb0, 0x180001460\nlea     ecx, [rdx+rdx]                                                 ; +0xb3, 0x180001463\nxor     r8d, ecx                                                       ; +0xb6, 0x180001466\nlea     ecx, [rdx+rdx]                                                 ; +0xb9, 0x180001469\nand     r8d, 55555555h                                                 ; +0xbc, 0x18000146c\nmov     edx, ebp                                                       ; +0xc3, 0x180001473\nsub     edx, eax                                                       ; +0xc5, 0x180001475\nxor     r8d, ecx                                                       ; +0xc7, 0x180001477\nmov     ecx, edx                                                       ; +0xca, 0x18000147a\nlea     rax, [r9+rax*4]                                                ; +0xcc, 0x18000147c\nshr     ecx, 2                                                         ; +0xd0, 0x180001480\ntest    ecx, ecx                                                       ; +0xd3, 0x180001483\njz      short loc_1800014AF                                            ; +0xd5, 0x180001485\ncmp     [rax], r8d                                                     ; +0xd7, 0x180001487\nja      loc_180001528                                                  ; +0xda, 0x18000148a\ncmp     [rax+4], r8d                                                   ; +0xe0, 0x180001490\nja      loc_18000151B                                                  ; +0xe4, 0x180001494\ncmp     [rax+8], r8d                                                   ; +0xea, 0x18000149a\nja      short loc_18000150E                                            ; +0xee, 0x18000149e\ncmp     [rax+0Ch], r8d                                                 ; +0xf0, 0x1800014a0\nja      short loc_180001501                                            ; +0xf4, 0x1800014a4\nadd     rax, 10h                                                       ; +0xf6, 0x1800014a6\nadd     ecx, 0FFFFFFFFh                                                ; +0xfa, 0x1800014aa\njnz     short loc_180001487                                            ; +0xfd, 0x1800014ad\nand     edx, 3                                                         ; +0xff, 0x1800014af\njz      short loc_1800014C2                                            ; +0x102, 0x1800014b2\ncmp     [rax], r8d                                                     ; +0x104, 0x1800014b4\nja      short loc_180001528                                            ; +0x107, 0x1800014b7\nadd     rax, 4                                                         ; +0x109, 0x1800014b9\nadd     edx, 0FFFFFFFFh                                                ; +0x10d, 0x1800014bd\njnz     short loc_1800014B4                                            ; +0x110, 0x1800014c0\nmov     eax, ebp                                                       ; +0x112, 0x1800014c2\nmov     rbp, [rsp+8+arg_0]                                             ; +0x114, 0x1800014c4\nmov     ecx, eax                                                       ; +0x119, 0x1800014c9\nand     ecx, 7FFFh                                                     ; +0x11b, 0x1800014cb\nmovsx   edx, byte ptr [rcx+rsi]                                        ; +0x121, 0x1800014d1\nadd     edx, [r11+10h]                                                 ; +0x125, 0x1800014d5\nmov     ecx, edx                                                       ; +0x129, 0x1800014d9\nand     ecx, 7                                                         ; +0x12b, 0x1800014db\nmov     [r11+10h], ecx                                                 ; +0x12e, 0x1800014de\nmovsxd  rcx, edx                                                       ; +0x132, 0x1800014e2\nsar     rcx, 3                                                         ; +0x135, 0x1800014e5\nadd     rcx, rbx                                                       ; +0x139, 0x1800014e9\nmov     rbx, [rsp+8+arg_8]                                             ; +0x13c, 0x1800014ec\nmov     [r11], rcx                                                     ; +0x141, 0x1800014f1\nlea     ecx, [rax-1]                                                   ; +0x144, 0x1800014f4\nmov     rax, [r10+50h]                                                 ; +0x147, 0x1800014f7\nmovsx   eax, word ptr [rax+rcx*2]                                      ; +0x14b, 0x1800014fb\npop     rsi                                                            ; +0x14f, 0x1800014ff\nretn                                                                   ; +0x150, 0x180001500\nsub     rax, r9                                                        ; +0x151, 0x180001501\nadd     rax, 0Ch                                                       ; +0x154, 0x180001504\nsar     rax, 2                                                         ; +0x158, 0x180001508\njmp     short loc_1800014C4                                            ; +0x15c, 0x18000150c\nsub     rax, r9                                                        ; +0x15e, 0x18000150e\nadd     rax, 8                                                         ; +0x161, 0x180001511\nsar     rax, 2                                                         ; +0x165, 0x180001515\njmp     short loc_1800014C4                                            ; +0x169, 0x180001519\nsub     rax, r9                                                        ; +0x16b, 0x18000151b\nadd     rax, 4                                                         ; +0x16e, 0x18000151e\nsar     rax, 2                                                         ; +0x172, 0x180001522\njmp     short loc_1800014C4                                            ; +0x176, 0x180001526\nsub     rax, r9                                                        ; +0x178, 0x180001528\nsar     rax, 2                                                         ; +0x17b, 0x18000152b\njmp     short loc_1800014C4                                            ; +0x17f, 0x18000152f", "xrefs": ["sub_180006A40 @ 0x180006b49", "sub_180006A40 @ 0x180006bc9", "sub_180006A40 @ 0x180006bee", "sub_180006A40 @ 0x180006c0c", "sub_180006A40 @ 0x180006c35", "sub_180006A40 @ 0x180006c92", "sub_180006A40 @ 0x180006cb7", "sub_180006A40 @ 0x180006cdd", "sub_180006A40 @ 0x180006d37", "sub_180009770 @ 0x1800099a7", "sub_180009770 @ 0x180009c21", "<???> @ 0x18017d354", "<???> @ 0x18017d364", "<???> @ 0x18017d378", "<???> @ 0x1801f609c"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}