{"type": "func", "start": 371716, "end": 371992, "name": "sub_5AC04", "pseudocode": "// \n// sub_5AC04 from 0x5ac04 to 0x5ad18 (276 bytes)\n// \n// 3 xrefs:\n// > sub_5BE98 @ 0x5beb4\n// > sub_5C618 @ 0x5c620\n// > sub_6C64C @ 0x6ccc4\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_5AC04(__int64 a1, __int64 a2, char a3, char a4)\n{\n  __int64 v4; // x8\n  __int64 v6; // x11\n  _QWORD *v7; // x10\n  _QWORD *v8; // x12\n  __int64 v9; // x10\n  __int64 v10; // x10\n  __int64 result; // x0\n  __int64 v12; // x0\n\n  v4 = *(_QWORD *)(a1 + 32);\n  if ( v4 )\n  {\n    v6 = *(_QWORD *)(a1 + 512);\n    v7 = (_QWORD *)(a1 + 512);\n    if ( v6 == a1 + 512 )\n    {\n      v8 = *(_QWORD **)(a1 + 520);\n      if ( v8 == v7 )\n        return 0;\n    }\n    else\n    {\n      v8 = *(_QWORD **)(a1 + 520);\n    }\n    --*(_DWORD *)(v4 + 476);\n    *v8 = v6;\n    *(_QWORD *)(*(_QWORD *)(a1 + 512) + 8LL) = v8;\n    *(_QWORD *)(a1 + 520) = v7;\n    *(_QWORD *)(a1 + 512) = v7;\n  }\n  *(_QWORD *)(a1 + 32) = a2;\n  *(_QWORD *)(a1 + 528) = a1;\n  if ( !a2 )\n    return 0;\n  v9 = *(_QWORD *)(a2 + 424);\n  *(_QWORD *)(a1 + 520) = a2 + 424;\n  *(_QWORD *)(a1 + 512) = v9;\n  *(_QWORD *)(v9 + 8) = a1 + 512;\n  **(_QWORD **)(a1 + 520) = a1 + 512;\n  ++*(_DWORD *)(a2 + 476);\n  v10 = *(_QWORD *)(a1 + 472);\n  if ( v10 )\n    result = 0;\n  else\n    result = 30;\n  if ( v10 )\n  {\n    if ( (a3 & 1) != 0 )\n    {\n      result = sub_5BDF0(a1, v4, a2, a4 & 1);\n      if ( !(_DWORD)result )\n      {\n        result = sub_5C5DC(result);\n        if ( !(_DWORD)result )\n        {\n          result = (*(__int64 (__fastcall **)(__int64, _QWORD))(*(_QWORD *)a1 + 16LL))(a1, *(_DWORD *)(a1 + 72) & 1);\n          if ( !(_DWORD)result )\n          {\n            v12 = sub_5C5F4();\n            if ( (*(_BYTE *)(*(_QWORD *)(a1 + 472) + 56LL) & 0x10) == 0 )\n              v12 = sub_5C514(v12);\n            sub_5C728(v12);\n            return 0;\n          }\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_5AC04 from 0x5ac04 to 0x5ad18 (276 bytes)\n; \n; 3 xrefs:\n; > sub_5BE98 @ 0x5beb4\n; > sub_5C618 @ 0x5c620\n; > sub_6C64C @ 0x6ccc4\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\nSTR             X19, [SP,#-0x10+var_10]!                               ; +0x0, 0x5ac04\nSTP             X29, X30, [SP,#0x10+var_s0]                            ; +0x4, 0x5ac08\nLDR             X8, [X0,#0x20]                                         ; +0x8, 0x5ac0c\nMOV             X19, X0                                                ; +0xc, 0x5ac10\nMOV             X9, X1                                                 ; +0x10, 0x5ac14\nADD             X29, SP, #0x10                                         ; +0x14, 0x5ac18\nCBZ             X8, loc_5AC64                                          ; +0x18, 0x5ac1c\nLDR             X11, [X19,#0x200]                                      ; +0x1c, 0x5ac20\nADD             X10, X19, #0x200                                       ; +0x20, 0x5ac24\nCMP             X11, X10                                               ; +0x24, 0x5ac28\nB.EQ            loc_5AC38                                              ; +0x28, 0x5ac2c\nLDR             X12, [X19,#0x208]                                      ; +0x2c, 0x5ac30\nB               loc_5AC44                                              ; +0x30, 0x5ac34\nLDR             X12, [X19,#0x208]                                      ; +0x34, 0x5ac38\nCMP             X12, X10                                               ; +0x38, 0x5ac3c\nB.EQ            loc_5AD08                                              ; +0x3c, 0x5ac40\nLDR             W13, [X8,#0x1DC]                                       ; +0x40, 0x5ac44\nSUB             W13, W13, #1                                           ; +0x44, 0x5ac48\nSTR             W13, [X8,#0x1DC]                                       ; +0x48, 0x5ac4c\nSTR             X11, [X12]                                             ; +0x4c, 0x5ac50\nLDR             X11, [X19,#0x200]                                      ; +0x50, 0x5ac54\nSTR             X12, [X11,#8]                                          ; +0x54, 0x5ac58\nSTR             X10, [X19,#0x208]                                      ; +0x58, 0x5ac5c\nSTR             X10, [X19,#0x200]                                      ; +0x5c, 0x5ac60\nSTR             X9, [X19,#0x20]                                        ; +0x60, 0x5ac64\nSTR             X19, [X19,#0x210]                                      ; +0x64, 0x5ac68\nCBZ             X9, loc_5AD08                                          ; +0x68, 0x5ac6c\nLDR             X10, [X9,#0x1A8]                                       ; +0x6c, 0x5ac70\nADD             X11, X19, #0x200                                       ; +0x70, 0x5ac74\nADD             X12, X9, #0x1A8                                        ; +0x74, 0x5ac78\nSTR             X12, [X19,#0x208]                                      ; +0x78, 0x5ac7c\nSTR             X10, [X19,#0x200]                                      ; +0x7c, 0x5ac80\nSTR             X11, [X10,#8]                                          ; +0x80, 0x5ac84\nLDR             X10, [X19,#0x208]                                      ; +0x84, 0x5ac88\nSTR             X11, [X10]                                             ; +0x88, 0x5ac8c\nLDR             W10, [X9,#0x1DC]                                       ; +0x8c, 0x5ac90\nMOV             W11, #0x1E                                             ; +0x90, 0x5ac94\nADD             W10, W10, #1                                           ; +0x94, 0x5ac98\nSTR             W10, [X9,#0x1DC]                                       ; +0x98, 0x5ac9c\nLDR             X10, [X19,#0x1D8]                                      ; +0x9c, 0x5aca0\nCMP             X10, #0                                                ; +0xa0, 0x5aca4\nCSEL            W0, W11, WZR, EQ                                       ; +0xa4, 0x5aca8\nCBZ             X10, loc_5AD0C                                         ; +0xa8, 0x5acac\nTBZ             W2, #0, loc_5AD0C                                      ; +0xac, 0x5acb0\nAND             W3, W3, #1                                             ; +0xb0, 0x5acb4\nMOV             X0, X19                                                ; +0xb4, 0x5acb8\nMOV             X1, X8                                                 ; +0xb8, 0x5acbc\nMOV             X2, X9                                                 ; +0xbc, 0x5acc0\nBL              sub_5BDF0                                              ; +0xc0, 0x5acc4\nCBNZ            W0, loc_5AD0C                                          ; +0xc4, 0x5acc8\nBL              sub_5C5DC                                              ; +0xc8, 0x5accc\nCBNZ            W0, loc_5AD0C                                          ; +0xcc, 0x5acd0\nLDR             X8, [X19]                                              ; +0xd0, 0x5acd4\nLDR             W9, [X19,#0x48]                                        ; +0xd4, 0x5acd8\nMOV             X0, X19                                                ; +0xd8, 0x5acdc\nLDR             X8, [X8,#0x10]                                         ; +0xdc, 0x5ace0\nAND             W1, W9, #1                                             ; +0xe0, 0x5ace4\nBLR             X8                                                     ; +0xe4, 0x5ace8\nCBNZ            W0, loc_5AD0C                                          ; +0xe8, 0x5acec\nBL              sub_5C5F4                                              ; +0xec, 0x5acf0\nLDR             X8, [X19,#0x1D8]                                       ; +0xf0, 0x5acf4\nLDRB            W8, [X8,#0x38]                                         ; +0xf4, 0x5acf8\nTBNZ            W8, #4, loc_5AD04                                      ; +0xf8, 0x5acfc\nBL              sub_5C514                                              ; +0xfc, 0x5ad00\nBL              sub_5C728                                              ; +0x100, 0x5ad04\nMOV             W0, WZR                                                ; +0x104, 0x5ad08\nLDP             X29, X30, [SP,#0x10+var_s0]                            ; +0x108, 0x5ad0c\nLDR             X19, [SP+0x10+var_10],#0x20                            ; +0x10c, 0x5ad10\nRET                                                                    ; +0x110, 0x5ad14", "xrefs": ["sub_5BE98 @ 0x5beb4", "sub_5C618 @ 0x5c620", "sub_6C64C @ 0x6ccc4"], "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"}