{"type": "func", "start": 339228, "end": 339932, "name": "sub_52D1C", "pseudocode": "// \n// sub_52D1C from 0x52d1c to 0x52fdc (704 bytes)\n// \n// 1 xrefs:\n// > <???> @ 0x10c238\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_52D1C(__int64 a1, __int64 a2)\n{\n  __int64 v4; // x21\n  __int64 result; // x0\n  __int64 (__fastcall *v6)(__int64, _QWORD, __int128 *, __int128 *, _QWORD, __int64); // x8\n  int v7; // w8\n  __int128 *v8; // x0\n  __int128 v9; // q0\n  __int128 v10; // q1\n  __int128 v11; // q2\n  __int128 v12; // q3\n  unsigned int v13; // w8\n  __int64 v14; // x0\n  __int64 v15; // x0\n  __int64 v16; // x0\n  int v17; // w21\n  __int64 v18; // x0\n  int v19; // w8\n  __int64 v20; // x0\n  __int64 v21; // x0\n  __int128 v22; // [xsp+0h] [xbp-B0h] BYREF\n  __int128 v23; // [xsp+10h] [xbp-A0h]\n  __int128 v24; // [xsp+20h] [xbp-90h]\n  __int128 v25; // [xsp+30h] [xbp-80h]\n  __int128 v26; // [xsp+40h] [xbp-70h] BYREF\n  char *v27; // [xsp+50h] [xbp-60h]\n  __int64 v28; // [xsp+58h] [xbp-58h]\n  __int64 v29; // [xsp+60h] [xbp-50h]\n  __int64 v30; // [xsp+70h] [xbp-40h] BYREF\n  __int64 v31; // [xsp+78h] [xbp-38h] BYREF\n  __int64 v32; // [xsp+80h] [xbp-30h] BYREF\n  __int64 v33; // [xsp+88h] [xbp-28h] BYREF\n\n  v32 = 0;\n  if ( !a2 )\n    return 31;\n  v4 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 104LL);\n  result = (*(__int64 (__fastcall **)(_QWORD, _QWORD, __int64 *))(**(_QWORD **)(*(_QWORD *)(a1 + 8) + 69856LL) + 288LL))(\n             *(_QWORD *)(*(_QWORD *)(a1 + 8) + 69856LL),\n             0,\n             &v33);\n  if ( !(_DWORD)result )\n  {\n    if ( v33 == a2 )\n    {\n      *(_QWORD *)(a1 + 48) = 0;\n      return 5;\n    }\n    result = ((__int64 (__fastcall *)(__int64))loc_524E4)(a1);\n    if ( !(_DWORD)result )\n    {\n      *(_QWORD *)(a1 + 744) = 0;\n      v6 = *(__int64 (__fastcall **)(__int64, _QWORD, __int128 *, __int128 *, _QWORD, __int64))(a2 + 296);\n      if ( !v6 )\n        goto LABEL_33;\n      *(_QWORD *)&v22 = 0;\n      *((_QWORD *)&v23 + 1) = 0;\n      *((_QWORD *)&v22 + 1) = &v31;\n      *(_QWORD *)&v23 = (char *)&v31 + 4;\n      v28 = 0;\n      v27 = (char *)&v30 + 4;\n      v31 = 0;\n      *(_QWORD *)&v24 = 0;\n      v30 = 0;\n      v29 = 0;\n      *((_QWORD *)&v26 + 1) = &v30;\n      *(_QWORD *)&v26 = 1;\n      *(_QWORD *)(a2 + 176) = a2;\n      result = v6(a2 + 176, 0, &v22, &v26, 0, 1);\n      v7 = 0;\n      if ( (unsigned int)result <= 0xB && ((1 << result) & 0x841) != 0 )\n      {\n        result = 0;\n        *(_WORD *)(a2 + 280) = v30;\n        v7 = 1;\n      }\n      if ( v7 )\n      {\nLABEL_33:\n        if ( !*(_WORD *)(a2 + 280) )\n          *(_WORD *)(a2 + 280) = 1;\n        v8 = (__int128 *)sub_BDCB4();\n        v9 = *v8;\n        v10 = v8[1];\n        v11 = v8[2];\n        v12 = v8[3];\n        LODWORD(v26) = 0;\n        BYTE12(v26) = 1;\n        v22 = v9;\n        v23 = v10;\n        v24 = v11;\n        v25 = v12;\n        v13 = *(unsigned __int16 *)(a2 + 280);\n        *(_QWORD *)&v24 = &v26;\n        *(_QWORD *)((char *)&v26 + 4) = v13;\n        LOWORD(v25) = v13;\n        result = sub_77040(*(_QWORD *)(a1 + 8), &v22, 0, &v32, 1);\n        if ( !(_DWORD)result )\n        {\n          v14 = v32;\n          *(_QWORD *)(a1 + 736) = v32;\n          result = sub_CC7C4(v14, a1);\n          if ( !(_DWORD)result )\n          {\n            *(float *)(*(_QWORD *)(a1 + 736) + 568LL) = (float)*(int *)(*(_QWORD *)(a1 + 8) + 1744LL);\n            v15 = *(_QWORD *)(a1 + 752);\n            *(_DWORD *)(a1 + 104) = 0;\n            if ( !v15 || (result = sub_53D58(v15), !(_DWORD)result) )\n            {\n              v16 = *(_QWORD *)(a1 + 760);\n              if ( !v16 || (result = sub_53D58(v16), !(_DWORD)result) )\n              {\n                if ( !*(_QWORD *)(a1 + 664) || (result = sub_53D68(a1 + 112), !(_DWORD)result) )\n                {\n                  sub_C7404(a1 + 112);\n                  result = sub_53D88(v4);\n                  if ( !(_DWORD)result )\n                  {\n                    if ( (*(_BYTE *)(a1 + 62) & 1) != 0 )\n                    {\nLABEL_30:\n                      v18 = *(_QWORD *)(a1 + 736);\n                      *(_QWORD *)(v18 + 680) = a2 + 8;\n                      *(_DWORD *)(v18 + 704) = *(_DWORD *)(a1 + 96);\n                      *(_DWORD *)(v18 + 608) = *(_DWORD *)(a1 + 84);\n                      *(_QWORD *)(v18 + 716) = *(_QWORD *)(a1 + 88);\n                      v19 = *(_DWORD *)(a1 + 56);\n                      *(_DWORD *)(v18 + 612) = -2;\n                      *(_DWORD *)(v18 + 712) = v19;\n                      *(_DWORD *)(v18 + 196) = *(_DWORD *)(a2 + 196);\n                      *(_WORD *)(a2 + 88) = 0;\n                      *(_WORD *)(a2 + 90) = *(_DWORD *)(v18 + 648);\n                      (*(void (__fastcall **)(__int64, _QWORD, _QWORD, _QWORD))(*(_QWORD *)v18 + 40LL))(v18, 0, 0, 0);\n                      v20 = sub_53D7C(*(_QWORD *)(a1 + 736));\n                      v21 = sub_53E14(v20);\n                      return sub_53DDC(v21);\n                    }\n                    result = sub_53DAC();\n                    if ( !(_DWORD)result )\n                    {\n                      v17 = 0;\n                      while ( v17 != 4 )\n                      {\n                        result = sub_52C8C(a1, *(_QWORD *)(a1 + 768), v17++);\n                        if ( (_DWORD)result )\n                          return result;\n                      }\n                      goto LABEL_30;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_52D1C from 0x52d1c to 0x52fdc (704 bytes)\n; \n; 1 xrefs:\n; > <???> @ 0x10c238\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\nSUB             SP, SP, #0xC0                                          ; +0x0, 0x52d1c\nSTP             X29, X30, [SP,#0xB0+var_s0]                            ; +0x4, 0x52d20\nADD             X29, SP, #0xB0                                         ; +0x8, 0x52d24\nSTP             X22, X21, [SP,#0xB0+var_20]                            ; +0xc, 0x52d28\nSTP             X20, X19, [SP,#0xB0+var_10]                            ; +0x10, 0x52d2c\nSTUR            XZR, [X29,#var_30]                                     ; +0x14, 0x52d30\nCBZ             X1, loc_52F40                                          ; +0x18, 0x52d34\nLDR             X8, [X0,#8]                                            ; +0x1c, 0x52d38\nMOV             W9, #0x110E0                                           ; +0x20, 0x52d3c\nMOV             X19, X0                                                ; +0x28, 0x52d44\nLDR             X0, [X8,X9]                                            ; +0x2c, 0x52d48\nLDR             X8, [X19,#0x18]                                        ; +0x30, 0x52d4c\nMOV             X20, X1                                                ; +0x34, 0x52d50\nSUB             X2, X29, #-var_28                                      ; +0x38, 0x52d54\nLDR             X9, [X0]                                               ; +0x3c, 0x52d58\nLDR             X21, [X8,#0x68]                                        ; +0x40, 0x52d5c\nMOV             W1, WZR                                                ; +0x44, 0x52d60\nLDR             X8, [X9,#0x120]                                        ; +0x48, 0x52d64\nBLR             X8                                                     ; +0x4c, 0x52d68\nCBNZ            W0, loc_52F44                                          ; +0x50, 0x52d6c\nLDUR            X8, [X29,#var_28]                                      ; +0x54, 0x52d70\nCMP             X8, X20                                                ; +0x58, 0x52d74\nB.EQ            loc_52F58                                              ; +0x5c, 0x52d78\nMOV             X0, X19                                                ; +0x60, 0x52d7c\nBL              loc_524E4                                              ; +0x64, 0x52d80\nCBNZ            W0, loc_52F44                                          ; +0x68, 0x52d84\nSTR             XZR, [X19,#0x2E8]                                      ; +0x6c, 0x52d88\nLDR             X8, [X20,#0x128]                                       ; +0x70, 0x52d8c\nCBZ             X8, loc_52E24                                          ; +0x74, 0x52d90\nMOVI            V0.2D, #0                                              ; +0x78, 0x52d94\nSUB             X9, X29, #-(var_38+4)                                  ; +0x7c, 0x52d98\nSUB             X10, X29, #-var_38                                     ; +0x80, 0x52d9c\nSTP             Q0, Q0, [SP,#0xB0+var_B0]                              ; +0x84, 0x52da0\nSTP             X10, X9, [SP,#0xB0+var_B0+8]                           ; +0x88, 0x52da4\nSUB             X9, X29, #-(var_40+4)                                  ; +0x8c, 0x52da8\nMOV             W22, #1                                                ; +0x90, 0x52dac\nSTP             Q0, Q0, [SP,#0xB0+var_70]                              ; +0x94, 0x52db0\nSTR             X9, [SP,#0xB0+var_60]                                  ; +0x98, 0x52db4\nSUB             X9, X29, #-var_40                                      ; +0x9c, 0x52db8\nADD             X0, X20, #0xB0                                         ; +0xa0, 0x52dbc\nMOV             X2, SP                                                 ; +0xa4, 0x52dc0\nADD             X3, SP, #0xB0+var_70                                   ; +0xa8, 0x52dc4\nMOV             W5, #1                                                 ; +0xac, 0x52dc8\nMOV             W1, WZR                                                ; +0xb0, 0x52dcc\nMOV             W4, WZR                                                ; +0xb4, 0x52dd0\nSTUR            XZR, [X29,#var_38]                                     ; +0xb8, 0x52dd4\nSTR             XZR, [SP,#0xB0+var_90]                                 ; +0xbc, 0x52dd8\nSTUR            XZR, [X29,#var_40]                                     ; +0xc0, 0x52ddc\nSTR             XZR, [SP,#0xB0+var_50]                                 ; +0xc4, 0x52de0\nSTR             X9, [SP,#0xB0+var_70+8]                                ; +0xc8, 0x52de4\nSTR             W22, [SP,#0xB0+var_70]                                 ; +0xcc, 0x52de8\nSTR             X20, [X20,#0xB0]                                       ; +0xd0, 0x52dec\nBLR             X8                                                     ; +0xd4, 0x52df0\nCMP             W0, #0xB                                               ; +0xd8, 0x52df4\nMOV             W8, WZR                                                ; +0xdc, 0x52df8\nB.HI            loc_52E20                                              ; +0xe0, 0x52dfc\nLSL             W9, W22, W0                                            ; +0xe4, 0x52e00\nMOV             W10, #0x841                                            ; +0xe8, 0x52e04\nTST             W9, W10                                                ; +0xec, 0x52e08\nB.EQ            loc_52E20                                              ; +0xf0, 0x52e0c\nLDUR            W8, [X29,#var_40]                                      ; +0xf4, 0x52e10\nMOV             W0, WZR                                                ; +0xf8, 0x52e14\nSTRH            W8, [X20,#0x118]                                       ; +0xfc, 0x52e18\nMOV             W8, #1                                                 ; +0x100, 0x52e1c\nCBZ             W8, loc_52F44                                          ; +0x104, 0x52e20\nLDRH            W8, [X20,#0x118]                                       ; +0x108, 0x52e24\nCBNZ            W8, loc_52E34                                          ; +0x10c, 0x52e28\nMOV             W8, #1                                                 ; +0x110, 0x52e2c\nSTRH            W8, [X20,#0x118]                                       ; +0x114, 0x52e30\nBL              sub_BDCB4                                              ; +0x118, 0x52e34\nLDP             Q0, Q1, [X0]                                           ; +0x11c, 0x52e38\nLDP             Q2, Q3, [X0,#0x20]                                     ; +0x120, 0x52e3c\nMOV             W8, #1                                                 ; +0x124, 0x52e40\nSTR             WZR, [SP,#0xB0+var_70]                                 ; +0x128, 0x52e44\nSTRB            W8, [SP,#0xB0+var_70+0xC]                              ; +0x12c, 0x52e48\nSTP             Q0, Q1, [SP,#0xB0+var_B0]                              ; +0x130, 0x52e4c\nSTP             Q2, Q3, [SP,#0xB0+var_90]                              ; +0x134, 0x52e50\nLDRH            W8, [X20,#0x118]                                       ; +0x138, 0x52e54\nADD             X9, SP, #0xB0+var_70                                   ; +0x13c, 0x52e58\nSTR             X9, [SP,#0xB0+var_90]                                  ; +0x140, 0x52e5c\nMOV             X1, SP                                                 ; +0x144, 0x52e60\nSTP             W8, WZR, [SP,#0xB0+var_70+4]                           ; +0x148, 0x52e64\nSTRH            W8, [SP,#0xB0+var_80]                                  ; +0x14c, 0x52e68\nLDR             X0, [X19,#8]                                           ; +0x150, 0x52e6c\nSUB             X3, X29, #-var_30                                      ; +0x154, 0x52e70\nMOV             W4, #1                                                 ; +0x158, 0x52e74\nMOV             X2, XZR                                                ; +0x15c, 0x52e78\nBL              sub_77040                                              ; +0x160, 0x52e7c\nCBNZ            W0, loc_52F44                                          ; +0x164, 0x52e80\nLDUR            X0, [X29,#var_30]                                      ; +0x168, 0x52e84\nMOV             X1, X19                                                ; +0x16c, 0x52e88\nSTR             X0, [X19,#0x2E0]                                       ; +0x170, 0x52e8c\nBL              sub_CC7C4                                              ; +0x174, 0x52e90\nCBNZ            W0, loc_52F44                                          ; +0x178, 0x52e94\nLDR             X8, [X19,#8]                                           ; +0x17c, 0x52e98\nLDR             S0, [X8,#0x6D0]                                        ; +0x180, 0x52e9c\nLDR             X8, [X19,#0x2E0]                                       ; +0x184, 0x52ea0\nSCVTF           S0, S0                                                 ; +0x188, 0x52ea4\nSTR             S0, [X8,#0x238]                                        ; +0x18c, 0x52ea8\nLDR             X0, [X19,#0x2F0]                                       ; +0x190, 0x52eac\nSTR             WZR, [X19,#0x68]                                       ; +0x194, 0x52eb0\nCBZ             X0, loc_52EC0                                          ; +0x198, 0x52eb4\nBL              sub_53D58                                              ; +0x19c, 0x52eb8\nCBNZ            W0, loc_52F44                                          ; +0x1a0, 0x52ebc\nLDR             X0, [X19,#0x2F8]                                       ; +0x1a4, 0x52ec0\nCBZ             X0, loc_52ED0                                          ; +0x1a8, 0x52ec4\nBL              sub_53D58                                              ; +0x1ac, 0x52ec8\nCBNZ            W0, loc_52F44                                          ; +0x1b0, 0x52ecc\nLDR             X8, [X19,#0x298]                                       ; +0x1b4, 0x52ed0\nADD             X22, X19, #0x70 ; 'p'                                  ; +0x1b8, 0x52ed4\nCBZ             X8, loc_52EEC                                          ; +0x1bc, 0x52ed8\nMOV             W3, #4                                                 ; +0x1c0, 0x52edc\nMOV             X0, X22                                                ; +0x1c4, 0x52ee0\nBL              sub_53D68                                              ; +0x1c8, 0x52ee4\nCBNZ            W0, loc_52F44                                          ; +0x1cc, 0x52ee8\nMOV             X0, X22                                                ; +0x1d0, 0x52eec\nBL              sub_C7404                                              ; +0x1d4, 0x52ef0\nLDR             X1, [X19,#0x2E0]                                       ; +0x1d8, 0x52ef4\nLDR             X8, [X19,#0x18]                                        ; +0x1dc, 0x52ef8\nMOV             X0, X21                                                ; +0x1e0, 0x52efc\nBL              sub_53D88                                              ; +0x1e4, 0x52f00\nCBNZ            W0, loc_52F44                                          ; +0x1e8, 0x52f04\nLDRB            W8, [X19,#0x3E]                                        ; +0x1ec, 0x52f08\nTBNZ            W8, #0, loc_52F64                                      ; +0x1f0, 0x52f0c\nBL              sub_53DAC                                              ; +0x1f4, 0x52f10\nCBNZ            W0, loc_52F44                                          ; +0x1f8, 0x52f14\nMOV             W21, WZR                                               ; +0x1fc, 0x52f18\nCMP             W21, #4                                                ; +0x200, 0x52f1c\nB.EQ            loc_52F64                                              ; +0x204, 0x52f20\nLDR             X1, [X19,#0x300]                                       ; +0x208, 0x52f24\nMOV             X0, X19                                                ; +0x20c, 0x52f28\nMOV             W2, W21                                                ; +0x210, 0x52f2c\nBL              sub_52C8C                                              ; +0x214, 0x52f30\nADD             W21, W21, #1                                           ; +0x218, 0x52f34\nCBZ             W0, loc_52F1C                                          ; +0x21c, 0x52f38\nB               loc_52F44                                              ; +0x220, 0x52f3c\nMOV             W0, #0x1F                                              ; +0x224, 0x52f40\nLDP             X29, X30, [SP,#0xB0+var_s0]                            ; +0x228, 0x52f44\nLDP             X20, X19, [SP,#0xB0+var_10]                            ; +0x22c, 0x52f48\nLDP             X22, X21, [SP,#0xB0+var_20]                            ; +0x230, 0x52f4c\nADD             SP, SP, #0xC0                                          ; +0x234, 0x52f50\nRET                                                                    ; +0x238, 0x52f54\nSTR             XZR, [X19,#0x30]                                       ; +0x23c, 0x52f58\nMOV             W0, #5                                                 ; +0x240, 0x52f5c\nB               loc_52F44                                              ; +0x244, 0x52f60\nLDR             X0, [X19,#0x2E0]                                       ; +0x248, 0x52f64\nADD             X8, X20, #8                                            ; +0x24c, 0x52f68\nMOV             W1, WZR                                                ; +0x250, 0x52f6c\nMOV             W2, WZR                                                ; +0x254, 0x52f70\nSTR             X8, [X0,#0x2A8]                                        ; +0x258, 0x52f74\nLDR             W8, [X19,#0x60]                                        ; +0x25c, 0x52f78\nADD             X9, X0, #0x2CC                                         ; +0x260, 0x52f7c\nMOV             W3, WZR                                                ; +0x264, 0x52f80\nSTR             W8, [X0,#0x2C0]                                        ; +0x268, 0x52f84\nLDR             W8, [X19,#0x54]                                        ; +0x26c, 0x52f88\nSTR             W8, [X0,#0x260]                                        ; +0x270, 0x52f8c\nLDR             X8, [X19,#0x58]                                        ; +0x274, 0x52f90\nSTR             X8, [X9]                                               ; +0x278, 0x52f94\nLDR             W8, [X19,#0x38]                                        ; +0x27c, 0x52f98\nMOV             W9, #0xFFFFFFFE                                        ; +0x280, 0x52f9c\nSTR             W9, [X0,#0x264]                                        ; +0x284, 0x52fa0\nSTR             W8, [X0,#0x2C8]                                        ; +0x288, 0x52fa4\nLDR             W8, [X20,#0xC4]                                        ; +0x28c, 0x52fa8\nSTR             W8, [X0,#0xC4]                                         ; +0x290, 0x52fac\nSTRH            WZR, [X20,#0x58]                                       ; +0x294, 0x52fb0\nLDR             W8, [X0,#0x288]                                        ; +0x298, 0x52fb4\nSTRH            W8, [X20,#0x5A]                                        ; +0x29c, 0x52fb8\nLDR             X8, [X0]                                               ; +0x2a0, 0x52fbc\nLDR             X8, [X8,#0x28]                                         ; +0x2a4, 0x52fc0\nBLR             X8                                                     ; +0x2a8, 0x52fc4\nLDR             X0, [X19,#0x2E0]                                       ; +0x2ac, 0x52fc8\nBL              sub_53D7C                                              ; +0x2b0, 0x52fcc\nBL              sub_53E14                                              ; +0x2b4, 0x52fd0\nBL              sub_53DDC                                              ; +0x2b8, 0x52fd4\nB               loc_52F44                                              ; +0x2bc, 0x52fd8", "xrefs": ["<???> @ 0x10c238"], "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"}