import struct
exec(open('/tmp/claude-0/-root-ants/f0a0d69c-fbe4-4887-8c0d-a5302a0da398/scratchpad/x86bridge.py').read().split("print('\\n--- registration")[0])
CODEREG=0x1d3728c
mpCount=u32(CODEREG); mpPtr=u32(CODEREG+4)
MP=struct.unpack_from('<%dI'%mpCount,B,va2off(mpPtr))
sm=open(SYM,'rb').read(); n,=struct.unpack_from('<I',sm,0)
size={}
for i in range(n):
    a,s=struct.unpack_from('<QI',sm,4+i*12); size[a]=s
def maddr(mi): return MP[mi] if 0<=mi<mpCount else 0

targets={}
for ti,t in enumerate(TYPES):
    if S(t[1])!='Gu3' or S(t[0])!='Debug': continue
    for k in range(t[20]):
        m=METHODS[t[13]+k]; mn=S(m[0]); a=maddr(m[6])
        if mn in ('Log','Logf','Info','Infof','LogWarning','LogError','LogException'):
            targets[a]=(mn,m[15],size.get(a,0))
    break

counts={a:0 for a in targets}
o=TO
for k in range(TS-5):
    if B[o+k]!=0xE8: continue
    rel,=struct.unpack_from('<i',B,o+k+1)
    tgt=(TA+k+5+rel)&0xFFFFFFFF
    if tgt in counts: counts[tgt]+=1
agg={}
for a,(mn,pc,sz) in targets.items():
    agg.setdefault(mn,[0,0])
    agg[mn][0]+=counts[a]
    agg[mn][1]+=1
print('%-14s %-8s %-8s %s'%('method','callsites','overloads','note'))
for mn in ('Log','Logf','Info','Infof','LogWarning','LogError','LogException'):
    if mn in agg:
        c,ov=agg[mn]
        stub=all(targets[a][2]<=2 for a in targets if targets[a][0]==mn)
        print('%-14s %-8d %-8d %s'%(mn,c,ov,'ALL STUBS (1 byte)' if stub else 'real bodies'))
