code: def parse(bin_payload, recipient):
      
      
      if len(bin_payload) != 1 + LENGTHS['name_hash'] + LENGTHS['consensus_hash']:
          log.error("Invalid transfer payload length %s" % len(bin_payload))
          return None 
  
      disposition_char = bin_payload[0:1]
      name_hash128 = bin_payload[1:1+LENGTHS['name_hash']]
      consensus_hash = bin_payload[1+LENGTHS['name_hash']:]
     
      if disposition_char not in [TRANSFER_REMOVE_DATA, TRANSFER_KEEP_DATA]:
          log.error("Invalid disposition character")
          return None 
  
      # keep data by default 
      disposition = True 
      
      if disposition_char == TRANSFER_REMOVE_DATA:
         disposition = False 
     
      try:
         rc = transfer_sanity_check( None, consensus_hash )
         if not rc:
             raise Exception("Invalid transfer data")
  
      except Exception, e:
         log.error("Invalid transfer data")
         return None
  
      return {
          'opcode': 'NAME_TRANSFER',
          'name_hash128': hexlify( name_hash128 ),
          'consensus_hash': hexlify( consensus_hash ),
          'recipient': recipient,
          'keep_data': disposition
      }
docs: # NOTE: first three bytes were stripped