<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def prov_key(job_msg, extra=None):
 """Retrieves a MD5 sum from a function call. This takes into account the name of the function, the arguments and possibly a version number of the function, if that is given in the hints. This version can also be auto-generated by generating an MD5 hash from the function source. However, the source-code may not always be reachable, or the result may depend on an external process which has its own versioning."""

    m = hashlib.md5()
    update_object_hash(m, job_msg['data']['function'])
    update_object_hash(m, job_msg['data']['arguments'])

    if 'version' in job_msg['data']['hints']:
        update_object_hash(m, job_msg['data']['hints']['version'])

    if extra is not None:
        update_object_hash(m, extra)

    return m.hexdigest()