human
Complete the below
def diff_states(start, end, ignore=None):

    ''''Differences two "filesystem states" as represented by dictionaries
    of FoundFile and FoundDir objects.
    Returns a dictionary with following keys:
    ``deleted``
    Dictionary of files/directories found only in the start state.
    ``created``
    Dictionary of files/directories found only in the end state.
    ``updated``
    Dictionary of files whose size has changed (FIXME not entirely
    reliable, but comparing contents is not possible because
    FoundFile.bytes is lazy, and comparing mtime doesn\'t help if
    we want to know if a file has been returned to its earlier
    state).
    Ignores mtime and other file attributes.
only presence/absence and
    size are considered.'
    '''
 ... Give me a the Python program you requested?
assistant
#Here is the Python program you requested.
    ignore = (ignore or [])
    def prefix_match(path, prefix):
        if (path == prefix):
            return True
        prefix = (prefix.rstrip(os.path.sep) + os.path.sep)
        return path.startswith(prefix)
    start_keys = set([k for k in start.keys() if (not any([prefix_match(k, i) for i in ignore]))])
    end_keys = set([k for k in end.keys() if (not any([prefix_match(k, i) for i in ignore]))])
    deleted = dict([(k, start[k]) for k in start_keys.difference(end_keys)])
    created = dict([(k, end[k]) for k in end_keys.difference(start_keys)])
    updated = {}
    for k in start_keys.intersection(end_keys):
        if (start[k].size != end[k].size):
            updated[k] = end[k]
    return dict(deleted=deleted, created=created, updated=updated)