"""DIM4 Q1/Q2/Q3. The per-op handler table at 0x180214db8.. has 3-qword rows
[?, url_builder, body_serializer]. Decompile the body serializers for the three ops
that POST/PUT a body (ISStart 0x180165a90, ISOfferTrade 0x180164e50,
ISWatchTrade 0x180164970), the two URL builders Ghidra left undefined
(GetAuctionCount 0x180163580 '/counts', RelistAll 0x1801641c0 '/relist'), the
no-body stub 0x18011f940, and the search-filter enum stringifiers.

CONTROL 1: 0x18011f940 must decompile to a trivial/no-op emitter -- if the "slot2 is
the body serializer" reading is right, the GET-only ops all share it and it must
write nothing. If it writes a body, the slot reading is wrong.
CONTROL 2: the auctionInfo record deser 0x18013e410 must reproduce the 12 atoms
already documented HIGH in ENDPOINT_MAP; that validates the same reading method for
the response structs whose atom sets are still MED.
"""
import traceback
try:
    FN = [
        ("GetAuctionCount_url /counts",  0x180163580),
        ("RelistAll_url /relist",        0x1801641c0),
        ("ISStart_BODY",                 0x180165a90),
        ("ISOfferTrade_BODY",            0x180164e50),
        ("ISWatchTrade_BODY",            0x180164970),
        ("ISStart_url(generic)",         0x180122420),
        ("nobody_stub(CONTROL1)",        0x18011f940),
        ("row A slot2 0x180162530",      0x180162530),
        ("searchtype->str",              0x180166340),
        ("pos->str",                     0x1801668a0),
        ("zone->str",                    0x180166550),
        ("pos2->str",                    0x180166c60),
        ("form->str",                    0x180166620),
        ("lev->str",                     0x1801667d0),
        ("cat->str",                     0x180166300),
    ]
    for nm, a in FN:
        print("\n########## %s @ %#x ##########" % (nm, a))
        f = func(a)
        print("containing func = %s @ %#x" % (f.getName() if f else "NONE",
              int(f.getEntryPoint().getOffset()) if f else 0))
        s = dec(a)
        print("len(src)=%d" % len(s))
        print(s)
    print("\n\n########## CONTROL2 auctionInfo record deser 0x18013e410 ##########")
    s = dec(0x18013e410)
    print("len(src)=%d" % len(s)); print(s)
    print("\n########## shared IS-list body 0x18013e7f0 ##########")
    s = dec(0x18013e7f0)
    print("len(src)=%d" % len(s)); print(s)
except Exception:
    traceback.print_exc()
