"""The settings struct starts at object+0x28 (FUN_18014e590 passes param_1+0x28 to the deser). Two functions outside the locator name the service id 0xed84b11: 0x180117020 and 0x1801170b0. One of them should be the concrete class's create/register, which reaches its constructor, which holds the defaults. What matters is the value each gate field is born with, because the server has always sent an empty configs array: param_2[0xb] storeEnabled <- CONTROL, screen works => born true param_2[0x16] friendlySeasonsEnabled <- Seasons param_2[0x17] enableDraftMode <- Draft param_2[0x18] enableOffline/SinglePlayerDraftMode param_2[0x1c] enableObjectives(AsManagerTasks) <- only ever CLEARED, so its default is the only value it can ever have unless we send 0 Field N sits at byte offset 0x28 + N*4. """ for va in (0x180117020, 0x1801170B0): print("=" * 78) print("%#x" % va) print("=" * 78) print(dec(va)) print("-- callees --") for a, n in callees(va): print(" %#x %s" % (a, n)) print()