"""HYPOTHESIS: FUN_1800f7c40 references BOTH FUT::SeasonsManagerOfflineHelper and FUT::SeasonsManagerOnlineHelper (and the Competition pair), so it is the place that CHOOSES online vs offline behaviour -- i.e. it contains the client's own notion of "am I online for FUT". FUN_1800b2680 owns the GOTO_ONLINE_SEASON / GOTO_OFFLINE_SEASON navigation names and should gate them on the same predicate. CONTROL: FUN_18006cc60 was already proven (query 2) to be a name-publisher whose values come from model vtable slots. If FUN_1800b2680 turns out to publish names the same way, the shape is the proven one, not an assumed one. I also print FUN_1800a6680 (IS_MODE_ONLINE) whose online/offline split is known from its literals, as a second same-shape reference point. Full source printed, length reported, never truncated. """ import traceback try: TARGETS = [ ("helper factory FUN_1800f7c40", 0x1800f7c40), ("nav names FUN_1800b2680", 0x1800b2680), ("draft hub FUN_1800a6680", 0x1800a6680), ("seasons offline helper FUN_1801012c0", 0x1801012c0), ("seasons online helper FUN_1801014c0", 0x1801014c0), ] for label, a in TARGETS: src = dec(a) f = func(a) print("\n" + "=" * 78) print("### %s entry=%#x len(src)=%d" % ( label, int(f.getEntryPoint().getOffset()) if f else 0, len(src))) print("=" * 78) print(src) except Exception: traceback.print_exc()