{"type": "func", "start": 343728, "end": 344320, "name": "sub_53EB0", "pseudocode": "// \n// sub_53EB0 from 0x53eb0 to 0x54100 (592 bytes)\n// \n// 1 xrefs:\n// > <???> @ 0x10c328\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_53EB0(__int64 a1)\n{\n  __int64 v2; // x21\n  __int64 v3; // x0\n  unsigned int *v4; // x8\n  unsigned int v5; // w9\n  unsigned int v6; // w9\n  unsigned int v7; // w9\n  __int64 v8; // x9\n  __int64 v9; // x10\n  unsigned int *v10; // x10\n  unsigned int v11; // w11\n  int v12; // w9\n  float *v13; // x0\n  __int64 v14; // x20\n  unsigned int v15; // w9\n  unsigned int v16; // w9\n  __int64 v17; // x9\n  unsigned int v18; // w20\n  __int64 v19; // x0\n  __int64 v20; // x9\n  __int64 v21; // x19\n  unsigned int v23; // w10\n  __int64 v24; // x1\n\n  v2 = *(_QWORD *)(a1 + 40);\n  sub_7B9D0(*(_QWORD *)(a1 + 8), 8);\n  v3 = *(_QWORD *)(a1 + 8);\n  *(_DWORD *)(a1 + 60) &= ~0x80u;\n  sub_7B9F0(v3, 8);\n  *(_QWORD *)(a1 + 8) = *(_QWORD *)(v2 + 216);\n  v4 = (unsigned int *)(v2 + 88);\n  *(_BYTE *)(a1 + 136) = 0;\n  *(_QWORD *)(a1 + 144) = 0;\n  *(_DWORD *)(a1 + 152) = 0;\n  do\n    v5 = __ldaxr(v4);\n  while ( __stlxr(v5 & 0xFFFFFFBF, v4) );\n  do\n    v6 = __ldaxr(v4);\n  while ( __stlxr(v6 | 0x800, v4) );\n  if ( *(_QWORD *)(a1 + 72) )\n  {\n    do\n      v7 = __ldaxr(v4);\n    while ( __stlxr(v7 | 0x10, v4) );\n  }\n  v8 = *(_QWORD *)(v2 + 184);\n  v9 = v2;\n  if ( v8 )\n  {\n    v10 = (unsigned int *)(v8 + 88);\n    do\n      v11 = __ldaxr(v10);\n    while ( __stlxr(v11 & 0xFFFFFFBF, v10) );\n    v9 = v8;\n  }\n  v12 = *(_DWORD *)(v9 + 404);\n  v13 = *(float **)(a1 + 192);\n  *(_DWORD *)(a1 + 156) = 0;\n  *(_DWORD *)(a1 + 160) = 0;\n  *(_DWORD *)(a1 + 76) = v12;\n  *(float *)(a1 + 104) = fmaxf(v13[26], 100.0);\n  *(float *)(a1 + 100) = v13[25];\n  v14 = *(_QWORD *)(v2 + 384);\n  if ( v14 )\n  {\n    if ( (*(_BYTE *)(v2 + 45) & 4) != 0\n      || (v15 = *(_DWORD *)(v2 + 36), v15 <= 0x10) && ((1 << v15) & 0x121C0) != 0\n      || *(_DWORD *)(v2 + 68) > *(_DWORD *)(v14 + 68) )\n    {\n      do\n        v16 = __ldaxr(v4);\n      while ( __stlxr(v16 & 0xFFFFFF7F, v4) );\n      (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v14 + 280LL))(v14, 2);\n      (*(void (__fastcall **)(__int64, _QWORD, __int64, _QWORD, __int64))(*(_QWORD *)v14 + 312LL))(\n        v14,\n        0,\n        2,\n        (unsigned int)(*(_DWORD *)(v14 + 68) - 1),\n        2);\n    }\n    else\n    {\n      do\n        v23 = __ldaxr(v4);\n      while ( __stlxr(v23 | 0x88, v4) );\n      if ( (*(_DWORD *)(a1 + 56) & 6) != 0 )\n        v24 = 2;\n      else\n        v24 = 1;\n      (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v14 + 280LL))(v14, v24);\n      (*(void (__fastcall **)(__int64, _QWORD, __int64, _QWORD, __int64))(*(_QWORD *)v14 + 312LL))(\n        v14,\n        *(unsigned int *)(v2 + 76),\n        2,\n        (unsigned int)(*(_DWORD *)(v2 + 76) + *(_DWORD *)(v2 + 80) - 1),\n        2);\n    }\n    *(_QWORD *)(v14 + 184) = v2;\n    v13 = *(float **)(a1 + 192);\n    v13[14] = *(float *)(v14 + 44);\n    *((_QWORD *)v13 + 11) = *(_QWORD *)(v14 + 76);\n    v13[24] = *(float *)(v14 + 68);\n  }\n  *((_QWORD *)v13 + 5) = v14;\n  *((_QWORD *)v13 + 6) = 0;\n  v13[21] = NAN;\n  v17 = *(_QWORD *)v13;\n  *((_QWORD *)v13 + 3) = *(_QWORD *)(a1 + 24);\n  v18 = (*(__int64 (**)(void))(v17 + 40))();\n  if ( !v18 )\n  {\n    sub_54CDC();\n    v19 = *(_QWORD *)(a1 + 8);\n    *(_QWORD *)(a1 + 184) = a1;\n    v20 = *(_QWORD *)(v19 + 72680);\n    *(_QWORD *)(a1 + 168) = v19 + 72672;\n    v21 = a1 + 168;\n    *(_QWORD *)(v21 + 8) = v20;\n    *(_QWORD *)(v19 + 72680) = v21;\n    **(_QWORD **)(v21 + 8) = v21;\n    sub_7B9F0(v19, 10);\n  }\n  return v18;\n}", "assembly": "; \n; sub_53EB0 from 0x53eb0 to 0x54100 (592 bytes)\n; \n; 1 xrefs:\n; > <???> @ 0x10c328\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             X21, [SP,#-0x10+var_20]!                               ; +0x0, 0x53eb0\nSTP             X20, X19, [SP,#0x20+var_10]                            ; +0x4, 0x53eb4\nSTP             X29, X30, [SP,#0x20+var_s0]                            ; +0x8, 0x53eb8\nMOV             X19, X0                                                ; +0xc, 0x53ebc\nLDR             X21, [X0,#0x28]                                        ; +0x10, 0x53ec0\nLDR             X0, [X0,#8]                                            ; +0x14, 0x53ec4\nMOV             W1, #8                                                 ; +0x18, 0x53ec8\nADD             X29, SP, #0x20                                         ; +0x1c, 0x53ecc\nBL              sub_7B9D0                                              ; +0x20, 0x53ed0\nLDR             W8, [X19,#0x3C]                                        ; +0x24, 0x53ed4\nLDR             X0, [X19,#8]                                           ; +0x28, 0x53ed8\nMOV             W1, #8                                                 ; +0x2c, 0x53edc\nAND             W8, W8, #0xFFFFFF7F                                    ; +0x30, 0x53ee0\nSTR             W8, [X19,#0x3C]                                        ; +0x34, 0x53ee4\nBL              sub_7B9F0                                              ; +0x38, 0x53ee8\nLDR             X8, [X21,#0xD8]                                        ; +0x3c, 0x53eec\nSTR             X8, [X19,#8]                                           ; +0x40, 0x53ef0\nADD             X8, X21, #0x58 ; 'X'                                   ; +0x44, 0x53ef4\nSTRB            WZR, [X19,#0x88]                                       ; +0x48, 0x53ef8\nSTR             XZR, [X19,#0x90]                                       ; +0x4c, 0x53efc\nSTR             WZR, [X19,#0x98]                                       ; +0x50, 0x53f00\nLDAXR           W9, [X8]                                               ; +0x54, 0x53f04\nAND             W9, W9, #0xFFFFFFBF                                    ; +0x58, 0x53f08\nSTLXR           W10, W9, [X8]                                          ; +0x5c, 0x53f0c\nCBNZ            W10, loc_53F04                                         ; +0x60, 0x53f10\nLDAXR           W9, [X8]                                               ; +0x64, 0x53f14\nORR             W9, W9, #0x800                                         ; +0x68, 0x53f18\nSTLXR           W10, W9, [X8]                                          ; +0x6c, 0x53f1c\nCBNZ            W10, loc_53F14                                         ; +0x70, 0x53f20\nLDR             X9, [X19,#0x48]                                        ; +0x74, 0x53f24\nCBZ             X9, loc_53F3C                                          ; +0x78, 0x53f28\nLDAXR           W9, [X8]                                               ; +0x7c, 0x53f2c\nORR             W9, W9, #0x10                                          ; +0x80, 0x53f30\nSTLXR           W10, W9, [X8]                                          ; +0x84, 0x53f34\nCBNZ            W10, loc_53F2C                                         ; +0x88, 0x53f38\nLDR             X9, [X21,#0xB8]                                        ; +0x8c, 0x53f3c\nMOV             X10, X21                                               ; +0x90, 0x53f40\nCBZ             X9, loc_53F60                                          ; +0x94, 0x53f44\nADD             X10, X9, #0x58 ; 'X'                                   ; +0x98, 0x53f48\nLDAXR           W11, [X10]                                             ; +0x9c, 0x53f4c\nAND             W11, W11, #0xFFFFFFBF                                  ; +0xa0, 0x53f50\nSTLXR           W12, W11, [X10]                                        ; +0xa4, 0x53f54\nCBNZ            W12, loc_53F4C                                         ; +0xa8, 0x53f58\nMOV             X10, X9                                                ; +0xac, 0x53f5c\nLDR             W9, [X10,#0x194]                                       ; +0xb0, 0x53f60\nLDR             X0, [X19,#0xC0]                                        ; +0xb4, 0x53f64\nSTP             WZR, WZR, [X19,#0x9C]                                  ; +0xb8, 0x53f68\nSTR             W9, [X19,#0x4C]                                        ; +0xbc, 0x53f6c\nLDR             S0, [X0,#0x68]                                         ; +0xc0, 0x53f70\nMOV             W9, #0x42C80000                                        ; +0xc4, 0x53f74\nFMOV            S1, W9                                                 ; +0xc8, 0x53f78\nFMAXNM          S0, S0, S1                                             ; +0xcc, 0x53f7c\nSTR             S0, [X19,#0x68]                                        ; +0xd0, 0x53f80\nLDR             W9, [X0,#0x64]                                         ; +0xd4, 0x53f84\nSTR             W9, [X19,#0x64]                                        ; +0xd8, 0x53f88\nLDR             X20, [X21,#0x180]                                      ; +0xdc, 0x53f8c\nCBZ             X20, loc_54028                                         ; +0xe0, 0x53f90\nLDRB            W9, [X21,#0x2D]                                        ; +0xe4, 0x53f94\nTBNZ            W9, #2, loc_53FC0                                      ; +0xe8, 0x53f98\nLDR             W9, [X21,#0x24]                                        ; +0xec, 0x53f9c\nCMP             W9, #0x10                                              ; +0xf0, 0x53fa0\nB.HI            loc_54098                                              ; +0xf4, 0x53fa4\nMOV             W10, #1                                                ; +0xf8, 0x53fa8\nLSL             W9, W10, W9                                            ; +0xfc, 0x53fac\nMOV             W10, #0x121C0                                          ; +0x100, 0x53fb0\nTST             W9, W10                                                ; +0x108, 0x53fb8\nB.EQ            loc_54098                                              ; +0x10c, 0x53fbc\nLDAXR           W9, [X8]                                               ; +0x110, 0x53fc0\nAND             W9, W9, #0xFFFFFF7F                                    ; +0x114, 0x53fc4\nSTLXR           W10, W9, [X8]                                          ; +0x118, 0x53fc8\nCBNZ            W10, loc_53FC0                                         ; +0x11c, 0x53fcc\nLDR             X8, [X20]                                              ; +0x120, 0x53fd0\nMOV             W1, #2                                                 ; +0x124, 0x53fd4\nMOV             X0, X20                                                ; +0x128, 0x53fd8\nLDR             X8, [X8,#0x118]                                        ; +0x12c, 0x53fdc\nBLR             X8                                                     ; +0x130, 0x53fe0\nLDR             X8, [X20]                                              ; +0x134, 0x53fe4\nLDR             W9, [X20,#0x44]                                        ; +0x138, 0x53fe8\nMOV             W2, #2                                                 ; +0x13c, 0x53fec\nMOV             W4, #2                                                 ; +0x140, 0x53ff0\nLDR             X8, [X8,#0x138]                                        ; +0x144, 0x53ff4\nSUB             W3, W9, #1                                             ; +0x148, 0x53ff8\nMOV             X0, X20                                                ; +0x14c, 0x53ffc\nMOV             W1, WZR                                                ; +0x150, 0x54000\nBLR             X8                                                     ; +0x154, 0x54004\nSTR             X21, [X20,#0xB8]                                       ; +0x158, 0x54008\nLDR             W8, [X20,#0x2C]                                        ; +0x15c, 0x5400c\nLDR             X0, [X19,#0xC0]                                        ; +0x160, 0x54010\nSTR             W8, [X0,#0x38]                                         ; +0x164, 0x54014\nLDUR            X8, [X20,#0x4C]                                        ; +0x168, 0x54018\nSTR             X8, [X0,#0x58]                                         ; +0x16c, 0x5401c\nLDR             W8, [X20,#0x44]                                        ; +0x170, 0x54020\nSTR             W8, [X0,#0x60]                                         ; +0x174, 0x54024\nMOV             W8, #0xFFFFFFFF                                        ; +0x178, 0x54028\nSTP             X20, XZR, [X0,#0x28]                                   ; +0x17c, 0x5402c\nSTR             W8, [X0,#0x54]                                         ; +0x180, 0x54030\nLDR             X8, [X19,#0x18]                                        ; +0x184, 0x54034\nLDR             X9, [X0]                                               ; +0x188, 0x54038\nSTR             X8, [X0,#0x18]                                         ; +0x18c, 0x5403c\nLDR             X8, [X9,#0x28]                                         ; +0x190, 0x54040\nBLR             X8                                                     ; +0x194, 0x54044\nMOV             W20, W0                                                ; +0x198, 0x54048\nCBNZ            W0, loc_54088                                          ; +0x19c, 0x5404c\nBL              sub_54CDC                                              ; +0x1a0, 0x54050\nLDR             X0, [X19,#8]                                           ; +0x1a4, 0x54054\nMOV             W8, #0x11BE0                                           ; +0x1a8, 0x54058\nSTR             X19, [X19,#0xB8]                                       ; +0x1b0, 0x54060\nADD             X8, X0, X8                                             ; +0x1b4, 0x54064\nLDR             X9, [X8,#8]                                            ; +0x1b8, 0x54068\nSTR             X8, [X19,#0xA8]!                                       ; +0x1bc, 0x5406c\nMOV             W1, #0xA                                               ; +0x1c0, 0x54070\nSTR             X9, [X19,#8]                                           ; +0x1c4, 0x54074\nSTR             X19, [X8,#8]                                           ; +0x1c8, 0x54078\nLDR             X8, [X19,#8]                                           ; +0x1cc, 0x5407c\nSTR             X19, [X8]                                              ; +0x1d0, 0x54080\nBL              sub_7B9F0                                              ; +0x1d4, 0x54084\nMOV             W0, W20                                                ; +0x1d8, 0x54088\nLDP             X29, X30, [SP,#0x20+var_s0]                            ; +0x1dc, 0x5408c\nLDP             X20, X19, [SP,#0x20+var_10]                            ; +0x1e0, 0x54090\nB               loc_54D08                                              ; +0x1e4, 0x54094\nLDR             W9, [X21,#0x44]                                        ; +0x1e8, 0x54098\nLDR             W10, [X20,#0x44]                                       ; +0x1ec, 0x5409c\nCMP             W9, W10                                                ; +0x1f0, 0x540a0\nB.HI            loc_53FC0                                              ; +0x1f4, 0x540a4\nMOV             W9, #0x88                                              ; +0x1f8, 0x540a8\nLDAXR           W10, [X8]                                              ; +0x1fc, 0x540ac\nORR             W10, W10, W9                                           ; +0x200, 0x540b0\nSTLXR           W11, W10, [X8]                                         ; +0x204, 0x540b4\nCBNZ            W11, loc_540AC                                         ; +0x208, 0x540b8\nLDR             X8, [X20]                                              ; +0x20c, 0x540bc\nLDR             W9, [X19,#0x38]                                        ; +0x210, 0x540c0\nMOV             X0, X20                                                ; +0x214, 0x540c4\nLDR             X8, [X8,#0x118]                                        ; +0x218, 0x540c8\nTST             W9, #6                                                 ; +0x21c, 0x540cc\nMOV             W9, #1                                                 ; +0x220, 0x540d0\nCINC            W1, W9, NE                                             ; +0x224, 0x540d4\nBLR             X8                                                     ; +0x228, 0x540d8\nLDR             X8, [X20]                                              ; +0x22c, 0x540dc\nLDP             W1, W9, [X21,#0x4C]                                    ; +0x230, 0x540e0\nMOV             W2, #2                                                 ; +0x234, 0x540e4\nMOV             W4, #2                                                 ; +0x238, 0x540e8\nLDR             X8, [X8,#0x138]                                        ; +0x23c, 0x540ec\nADD             W9, W1, W9                                             ; +0x240, 0x540f0\nSUB             W3, W9, #1                                             ; +0x244, 0x540f4\nMOV             X0, X20                                                ; +0x248, 0x540f8\nB               loc_54004                                              ; +0x24c, 0x540fc", "xrefs": ["<???> @ 0x10c328"], "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"}