{"type": "func", "start": 355352, "end": 355940, "name": "sub_56C18", "pseudocode": "// \n// sub_56C18 from 0x56c18 to 0x56e64 (588 bytes)\n// \n// 2 xrefs:\n// > <???> @ 0x10c528\n// > <???> @ 0x10c750\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_56C18(__int64 a1, __int64 a2, int a3)\n{\n  __int64 v3; // x21\n  __int64 v4; // x20\n  unsigned int v7; // w23\n  signed int v8; // w8\n  int v10; // w10\n  signed int v11; // w9\n  signed int v12; // w10\n  __int64 v13; // x9\n  bool v14; // cc\n  __int64 v15; // x8\n  _QWORD *v16; // x10\n  _QWORD *v17; // x10\n  __int64 v18; // x8\n  __int64 v19; // x0\n  __int64 v20; // [xsp+0h] [xbp-50h] BYREF\n  int v21; // [xsp+8h] [xbp-48h]\n  char v22; // [xsp+Ch] [xbp-44h]\n  __int128 v23; // [xsp+10h] [xbp-40h] BYREF\n  unsigned int v24; // [xsp+28h] [xbp-28h] BYREF\n  unsigned int v25; // [xsp+2Ch] [xbp-24h] BYREF\n\n  v25 = a3;\n  *(_QWORD *)&v23 = 0;\n  v3 = *(_QWORD *)(a1 + 96);\n  if ( !v3 )\n    return 9;\n  v4 = *(_QWORD *)(a1 + 112);\n  if ( a3 == -3 )\n  {\n    a3 = *(_DWORD *)(a1 + 24) - 1;\n    v25 = a3;\n    goto LABEL_8;\n  }\n  if ( a3 != -2 )\n  {\n    if ( a3 == -1 )\n    {\n      a3 = 0;\n      v25 = 0;\n      goto LABEL_9;\n    }\nLABEL_8:\n    if ( (a3 & 0x80000000) == 0 )\n      goto LABEL_9;\n    return 31;\n  }\n  v7 = sub_5796C(a1, *(_QWORD *)(a1 + 112), &v25);\n  if ( v7 )\n    return v7;\n  a3 = v25;\n  if ( (v25 & 0x80000000) != 0 )\n    return 31;\nLABEL_9:\n  if ( a3 >= *(_DWORD *)(a1 + 24) )\n    return 31;\n  v7 = sub_5796C(a1, a2, &v24);\n  if ( !v7 )\n  {\n    v8 = v24;\n    if ( v25 == v24 )\n      return 0;\n    if ( v24 )\n    {\n      if ( !v25 )\n        *((_QWORD *)&v23 + 1) = a2;\n    }\n    else\n    {\n      v7 = sub_5793C(a1, 1, (char *)&v23 + 8);\n      if ( v7 )\n        return v7;\n      v8 = v24;\n    }\n    v10 = *(_DWORD *)(a1 + 24);\n    v11 = v10 - 1;\n    if ( v8 == v10 - 1 )\n    {\n      v7 = sub_5793C(a1, (unsigned int)(v10 - 2), &v23);\n      if ( v7 )\n        return v7;\n      v12 = v25;\n      v8 = v24;\n    }\n    else\n    {\n      v12 = v25;\n      if ( v25 == v11 )\n      {\n        v12 = v11;\n        *(_QWORD *)&v23 = a2;\n      }\n    }\n    v13 = v8;\n    v14 = v12 <= v8;\n    v15 = v12;\n    if ( v14 )\n    {\n      while ( v13 > v15 )\n      {\n        v17 = (_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * v13--);\n        *v17 = *(v17 - 1);\n      }\n    }\n    else\n    {\n      while ( v13 < v15 )\n      {\n        v16 = (_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * v13++);\n        *v16 = v16[1];\n      }\n    }\n    *(_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * v15) = a2;\n    v18 = *(_QWORD *)(a1 + 8);\n    v22 = 0;\n    v21 = 1;\n    v20 = v18;\n    sub_520A0((__int64)&v20);\n    v7 = sub_CB2C0(v3, a2, v24, v25, 1, 0);\n    if ( v7 || *((_QWORD *)&v23 + 1) && (v7 = sub_579A0(v4, *((_QWORD *)&v23 + 1) + 8LL)) != 0 )\n    {\n      sub_57964();\n      return v7;\n    }\n    v19 = sub_57964();\n    if ( v23 == 0 )\n      return 0;\n    v7 = sub_5794C(v19);\n    if ( !v7 )\n      return 0;\n  }\n  return v7;\n}", "assembly": "; \n; sub_56C18 from 0x56c18 to 0x56e64 (588 bytes)\n; \n; 2 xrefs:\n; > <???> @ 0x10c528\n; > <???> @ 0x10c750\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, #0x60                                          ; +0x0, 0x56c18\nSTP             X29, X30, [SP,#0x50+var_s0]                            ; +0x4, 0x56c1c\nADD             X29, SP, #0x50                                         ; +0x8, 0x56c20\nSTP             XZR, X23, [SP,#0x50+var_40+8]                          ; +0xc, 0x56c24\nSTP             X22, X21, [SP,#0x50+var_20]                            ; +0x10, 0x56c28\nSTP             X20, X19, [SP,#0x50+var_10]                            ; +0x14, 0x56c2c\nSTUR            W2, [X29,#var_24]                                      ; +0x18, 0x56c30\nSTR             XZR, [SP,#0x50+var_40]                                 ; +0x1c, 0x56c34\nLDR             X21, [X0,#0x60]                                        ; +0x20, 0x56c38\nCBZ             X21, loc_56C70                                         ; +0x24, 0x56c3c\nLDR             X20, [X0,#0x70]                                        ; +0x28, 0x56c40\nMOV             X19, X0                                                ; +0x2c, 0x56c44\nMOV             X22, X1                                                ; +0x30, 0x56c48\nCMN             W2, #3                                                 ; +0x34, 0x56c4c\nB.EQ            loc_56C78                                              ; +0x38, 0x56c50\nCMN             W2, #2                                                 ; +0x3c, 0x56c54\nB.EQ            loc_56CC8                                              ; +0x40, 0x56c58\nCMN             W2, #1                                                 ; +0x44, 0x56c5c\nB.NE            loc_56C84                                              ; +0x48, 0x56c60\nMOV             W2, WZR                                                ; +0x4c, 0x56c64\nSTUR            WZR, [X29,#var_24]                                     ; +0x50, 0x56c68\nB               loc_56C88                                              ; +0x54, 0x56c6c\nMOV             W23, #9                                                ; +0x58, 0x56c70\nB               loc_56CF0                                              ; +0x5c, 0x56c74\nLDR             W8, [X19,#0x18]                                        ; +0x60, 0x56c78\nSUB             W2, W8, #1                                             ; +0x64, 0x56c7c\nSTUR            W2, [X29,#var_24]                                      ; +0x68, 0x56c80\nTBNZ            W2, #0x1F, loc_56CEC                                   ; +0x6c, 0x56c84\nLDR             W8, [X19,#0x18]                                        ; +0x70, 0x56c88\nCMP             W2, W8                                                 ; +0x74, 0x56c8c\nB.GE            loc_56CEC                                              ; +0x78, 0x56c90\nLDR             X8, [X19]                                              ; +0x7c, 0x56c94\nADD             X2, SP, #0x50+var_28                                   ; +0x80, 0x56c98\nMOV             X0, X19                                                ; +0x84, 0x56c9c\nMOV             X1, X22                                                ; +0x88, 0x56ca0\nBL              sub_5796C                                              ; +0x8c, 0x56ca4\nMOV             W23, W0                                                ; +0x90, 0x56ca8\nCBNZ            W0, loc_56CF0                                          ; +0x94, 0x56cac\nLDUR            W9, [X29,#var_24]                                      ; +0x98, 0x56cb0\nLDR             W8, [SP,#0x50+var_28]                                  ; +0x9c, 0x56cb4\nCMP             W9, W8                                                 ; +0xa0, 0x56cb8\nB.NE            loc_56D0C                                              ; +0xa4, 0x56cbc\nMOV             W23, WZR                                               ; +0xa8, 0x56cc0\nB               loc_56CF0                                              ; +0xac, 0x56cc4\nLDR             X8, [X19]                                              ; +0xb0, 0x56cc8\nSUB             X2, X29, #-var_24                                      ; +0xb4, 0x56ccc\nMOV             X0, X19                                                ; +0xb8, 0x56cd0\nMOV             X1, X20                                                ; +0xbc, 0x56cd4\nBL              sub_5796C                                              ; +0xc0, 0x56cd8\nMOV             W23, W0                                                ; +0xc4, 0x56cdc\nCBNZ            W0, loc_56CF0                                          ; +0xc8, 0x56ce0\nLDUR            W2, [X29,#var_24]                                      ; +0xcc, 0x56ce4\nTBZ             W2, #0x1F, loc_56C88                                   ; +0xd0, 0x56ce8\nMOV             W23, #0x1F                                             ; +0xd4, 0x56cec\nMOV             W0, W23                                                ; +0xd8, 0x56cf0\nLDP             X29, X30, [SP,#0x50+var_s0]                            ; +0xdc, 0x56cf4\nLDP             X20, X19, [SP,#0x50+var_10]                            ; +0xe0, 0x56cf8\nLDP             X22, X21, [SP,#0x50+var_20]                            ; +0xe4, 0x56cfc\nLDR             X23, [SP,#0x50+var_30]                                 ; +0xe8, 0x56d00\nADD             SP, SP, #0x60 ; '`'                                    ; +0xec, 0x56d04\nRET                                                                    ; +0xf0, 0x56d08\nCBZ             W8, loc_56D1C                                          ; +0xf4, 0x56d0c\nCBNZ            W9, loc_56D3C                                          ; +0xf8, 0x56d10\nSTR             X22, [SP,#0x50+var_40+8]                               ; +0xfc, 0x56d14\nB               loc_56D3C                                              ; +0x100, 0x56d18\nLDR             X8, [X19]                                              ; +0x104, 0x56d1c\nADD             X2, SP, #0x50+var_40+8                                 ; +0x108, 0x56d20\nMOV             W1, #1                                                 ; +0x10c, 0x56d24\nMOV             X0, X19                                                ; +0x110, 0x56d28\nBL              sub_5793C                                              ; +0x114, 0x56d2c\nMOV             W23, W0                                                ; +0x118, 0x56d30\nCBNZ            W0, loc_56CF0                                          ; +0x11c, 0x56d34\nLDR             W8, [SP,#0x50+var_28]                                  ; +0x120, 0x56d38\nLDR             W10, [X19,#0x18]                                       ; +0x124, 0x56d3c\nSUB             W9, W10, #1                                            ; +0x128, 0x56d40\nCMP             W8, W9                                                 ; +0x12c, 0x56d44\nB.NE            loc_56D74                                              ; +0x130, 0x56d48\nLDR             X8, [X19]                                              ; +0x134, 0x56d4c\nSUB             W1, W10, #2                                            ; +0x138, 0x56d50\nADD             X2, SP, #0x50+var_40                                   ; +0x13c, 0x56d54\nMOV             X0, X19                                                ; +0x140, 0x56d58\nBL              sub_5793C                                              ; +0x144, 0x56d5c\nMOV             W23, W0                                                ; +0x148, 0x56d60\nCBNZ            W0, loc_56CF0                                          ; +0x14c, 0x56d64\nLDUR            W10, [X29,#var_24]                                     ; +0x150, 0x56d68\nLDR             W8, [SP,#0x50+var_28]                                  ; +0x154, 0x56d6c\nB               loc_56D88                                              ; +0x158, 0x56d70\nLDUR            W10, [X29,#var_24]                                     ; +0x15c, 0x56d74\nCMP             W10, W9                                                ; +0x160, 0x56d78\nB.NE            loc_56D88                                              ; +0x164, 0x56d7c\nMOV             W10, W9                                                ; +0x168, 0x56d80\nSTR             X22, [SP,#0x50+var_40]                                 ; +0x16c, 0x56d84\nSXTW            X9, W8                                                 ; +0x170, 0x56d88\nCMP             W10, W8                                                ; +0x174, 0x56d8c\nSXTW            X8, W10                                                ; +0x178, 0x56d90\nB.LE            loc_56DB8                                              ; +0x17c, 0x56d94\nCMP             X9, X8                                                 ; +0x180, 0x56d98\nB.GE            loc_56DD8                                              ; +0x184, 0x56d9c\nLDR             X10, [X19,#0x10]                                       ; +0x188, 0x56da0\nADD             X10, X10, X9,LSL#3                                     ; +0x18c, 0x56da4\nLDR             X11, [X10,#8]                                          ; +0x190, 0x56da8\nADD             X9, X9, #1                                             ; +0x194, 0x56dac\nSTR             X11, [X10]                                             ; +0x198, 0x56db0\nB               loc_56D98                                              ; +0x19c, 0x56db4\nCMP             X9, X8                                                 ; +0x1a0, 0x56db8\nB.LE            loc_56DD8                                              ; +0x1a4, 0x56dbc\nLDR             X10, [X19,#0x10]                                       ; +0x1a8, 0x56dc0\nADD             X10, X10, X9,LSL#3                                     ; +0x1ac, 0x56dc4\nLDUR            X11, [X10,#-8]                                         ; +0x1b0, 0x56dc8\nSUB             X9, X9, #1                                             ; +0x1b4, 0x56dcc\nSTR             X11, [X10]                                             ; +0x1b8, 0x56dd0\nB               loc_56DB8                                              ; +0x1bc, 0x56dd4\nLDR             X9, [X19,#0x10]                                        ; +0x1c0, 0x56dd8\nMOV             X0, SP                                                 ; +0x1c4, 0x56ddc\nSTR             X22, [X9,X8,LSL#3]                                     ; +0x1c8, 0x56de0\nLDR             X8, [X19,#8]                                           ; +0x1cc, 0x56de4\nMOV             W9, #1                                                 ; +0x1d0, 0x56de8\nSTRB            WZR, [SP,#0x50+var_44]                                 ; +0x1d4, 0x56dec\nSTR             W9, [SP,#0x50+var_48]                                  ; +0x1d8, 0x56df0\nSTR             X8, [SP,#0x50+var_50]                                  ; +0x1dc, 0x56df4\nBL              sub_520A0                                              ; +0x1e0, 0x56df8\nLDR             W2, [SP,#0x50+var_28]                                  ; +0x1e4, 0x56dfc\nLDUR            W3, [X29,#var_24]                                      ; +0x1e8, 0x56e00\nMOV             W4, #1                                                 ; +0x1ec, 0x56e04\nMOV             X0, X21                                                ; +0x1f0, 0x56e08\nMOV             X1, X22                                                ; +0x1f4, 0x56e0c\nMOV             W5, WZR                                                ; +0x1f8, 0x56e10\nBL              sub_CB2C0                                              ; +0x1fc, 0x56e14\nMOV             W23, W0                                                ; +0x200, 0x56e18\nCBZ             W0, loc_56E28                                          ; +0x204, 0x56e1c\nBL              sub_57964                                              ; +0x208, 0x56e20\nB               loc_56CF0                                              ; +0x20c, 0x56e24\nLDR             X8, [SP,#0x50+var_40+8]                                ; +0x210, 0x56e28\nCBZ             X8, loc_56E44                                          ; +0x214, 0x56e2c\nADD             X1, X8, #8                                             ; +0x218, 0x56e30\nMOV             X0, X20                                                ; +0x21c, 0x56e34\nBL              sub_579A0                                              ; +0x220, 0x56e38\nMOV             W23, W0                                                ; +0x224, 0x56e3c\nCBNZ            W0, loc_56E20                                          ; +0x228, 0x56e40\nBL              sub_57964                                              ; +0x22c, 0x56e44\nLDP             X2, X1, [SP,#0x50+var_40]                              ; +0x230, 0x56e48\nORR             X8, X1, X2                                             ; +0x234, 0x56e4c\nCBZ             X8, loc_56CC0                                          ; +0x238, 0x56e50\nBL              sub_5794C                                              ; +0x23c, 0x56e54\nMOV             W23, W0                                                ; +0x240, 0x56e58\nCBNZ            W0, loc_56CF0                                          ; +0x244, 0x56e5c\nB               loc_56CC0                                              ; +0x248, 0x56e60", "xrefs": ["<???> @ 0x10c528", "<???> @ 0x10c750"], "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"}