def checkNames(clientinfo, serverinfo):
    if not ContributorTools.isSeargeName(clientinfo["name"]) and ContributorTools.isSeargeName(serverinfo["name"]):
        safeOutput(
            "0",
            serverinfo["name"],
            "pc"
            + serverinfo["searge"][1].replace("u", "m").replace("i", "f")
            + " "
            + clientinfo["searge"]
            + " "
            + serverinfo["searge"],
        )
    elif ContributorTools.isSeargeName(clientinfo["name"]) and not ContributorTools.isSeargeName(serverinfo["name"]):
        safeOutput(
            "1",
            clientinfo["name"],
            "ps"
            + clientinfo["searge"][1].replace("u", "m").replace("i", "f")
            + " "
            + serverinfo["searge"]
            + " "
            + clientinfo["searge"],
        )
ContributorTools.haveOutputted = False

def checkDifferentDescriptions (clientinfo, serverinfo):
    try:
        maxDistance = sys.argv[1]
    except:
        maxDistance = 5

    if clientinfo['name'] != serverinfo['name'] and Levenshtein.distance(clientinfo['name'], serverinfo['name']) <= maxDistance:
        output(clientinfo, serverinfo)
    elif clientinfo['name'] != serverinfo['name'] and clientinfo['name'].lower() == serverinfo['name'].lower():
        output(clientinfo, serverinfo)
    elif clientinfo['desc'] != serverinfo['desc'] and Levenshtein.distance(clientinfo['desc'], serverinfo['desc']) <= maxDistance:
        output(clientinfo, serverinfo)
    elif clientinfo['desc'] != serverinfo['desc'] and clientinfo['desc'].lower() == serverinfo['desc'].lower():
        output(clientinfo, serverinfo)

def output(clientinfo, serverinfo):
    if ContributorTools.haveOutputted:
        print '----'

    ContributorTools.haveOutputted = True

    print 'Client name:', clientinfo['name'], '(' + clientinfo['searge'] + ')'
    print 'Client description:', clientinfo['desc']
    print 'Server name:', serverinfo['name'], '(' + serverinfo['searge'] + ')'
    print 'Server description:', serverinfo['desc']

ContributorTools.forEachMember(checkDifferentDescriptions)
            serverinfo["name"],
            "pc"
            + serverinfo["searge"][1].replace("u", "m").replace("i", "f")
            + " "
            + clientinfo["searge"]
            + " "
            + serverinfo["searge"],
        )
    elif ContributorTools.isSeargeName(clientinfo["name"]) and not ContributorTools.isSeargeName(serverinfo["name"]):
        safeOutput(
            "1",
            clientinfo["name"],
            "ps"
            + clientinfo["searge"][1].replace("u", "m").replace("i", "f")
            + " "
            + serverinfo["searge"]
            + " "
            + clientinfo["searge"],
        )


def safeOutput(side, name, out):
    for member in ContributorTools.members[side].values():
        if member["name"] == name:
            print "POSSIBLY BROKEN:", out

    print out


ContributorTools.forEachMember(checkNames)
    'both': {'total': 0, 'renamed': 0, 'unnamed': 0}
  },
  'both': {
    'methods': {'total': 0, 'renamed': 0, 'unnamed': 0},
    'fields': {'total': 0, 'renamed': 0, 'unnamed': 0},
    'both': {'total': 0, 'renamed': 0, 'unnamed': 0}
  }
}

def recordStat(side, memberType, stat):
    stats[side][memberType][stat] += 1
    stats[side]['both'][stat] += 1
    stats['both'][memberType][stat] += 1
    stats['both']['both'][stat] += 1

for side, sideMembers in ContributorTools.getAllMembers().items():
    sideName = {'0': 'client', '1': 'server'}[side]
    for name, info in sideMembers.items():
        memberType = {'func_': 'methods', 'field': 'fields'}[info['searge'][:5]]
        recordStat(sideName, memberType, 'total')

        if info['searge'] == info['name'] and info['desc'] == '':
            recordStat(sideName, memberType, 'unnamed')
        else:
            recordStat(sideName, memberType, 'renamed')

def output(side, memberType):
    data = stats[side][memberType]
    total = ' ' * (5 - len(str(data['total']))) + str(data['total'])
    renamed = ' ' * (5 - len(str(data['renamed']))) + str(data['total'])
    unnamed = ' ' * (5 - len(str(data['unnamed']))) + str(data['unnamed'])