def METHOD_NAME(fasm_file):
    sites = {}
    diff_tiles = set()
    with open(fasm_file) as f:
        for l in f:
            if 'IOB33' not in l:
                continue
            parts = l.strip().split('.')
            tile = parts[0]
            site = parts[1]
            if 'OUT_DIFF' == site:
                diff_tiles.add(tile)
                continue
            if (tile, site) not in sites:
                sites[(tile, site)] = {
                    'tile': tile,
                    'site_key': site,
                }
            if len(parts) > 3 and 'IN_DIFF' == parts[3]:
                diff_tiles.add(tile)
            for key, value in process_parts(parts[2:]):
                sites[(tile, site)][key] = value
    for key in sites:
        if 'type' not in sites[key]:
            if 'IOSTANDARDS' not in sites[key]:
                sites[key]['type'] = [None]
            else:
                assert 'IOSTANDARDS' in sites[key], sites[key]
                assert 'DRIVES' in sites[key], sites[key]
                if 'IN' in sites[key]:
                    sites[key]['type'] = ['IOBUF', 'IOBUF_INTERMDISABLE']
                else:
                    sites[key]['type'] = [
                        "OBUF",
                        "OBUFDS",
                        "OBUFTDS",
                        "OBUFDS_DUAL_BUF",
                        "OBUFTDS_DUAL_BUF",
                    ]
    return sites, diff_tiles