<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def AddHash(self, sha1, md5, crc, file_name, file_size, product_code_list, op_system_code_list, special_code):
 """Adds a new file from the NSRL hash database. We create a new subject in: aff4:/files/nsrl/<sha1> with all the other arguments as attributes. Args: sha1: SHA1 digest as a hex encoded string. md5: MD5 digest as a hex encoded string. crc: File CRC as an integer. file_name: Filename. file_size: Size of file. product_code_list: List of products this file is part of. op_system_code_list: List of operating systems this file is part of. special_code: Special code (malicious/special/normal file). """

    file_store_urn = self.PATH.Add(sha1)

    special_code = self.FILE_TYPES.get(special_code, self.FILE_TYPES[""])

    with aff4.FACTORY.Create(
        file_store_urn, NSRLFile, mode="w", token=self.token) as fd:
      fd.Set(
          fd.Schema.NSRL(
              sha1=sha1.decode("hex"),
              md5=md5.decode("hex"),
              crc32=crc,
              file_name=file_name,
              file_size=file_size,
              product_code=product_code_list,
              op_system_code=op_system_code_list,
              file_type=special_code))