code: def __apply_mask(address_packed, mask_packed, nr_bytes):
      
  
      anon_packed = bytearray()
      for i in range(0, nr_bytes):
          anon_packed.append(ord(mask_packed[i]) & ord(address_packed[i]))
      return six.text_type(ip_address(six.binary_type(anon_packed)))
docs: Perform a bitwise AND operation on all corresponding bytes between the
      mask and the provided address. Mask parts set to 0 will become 0 in the
      anonymized IP address as well
      :param bytes address_packed: Binary representation of the IP address to
      be anonymized
      :param bytes mask_packed: Binary representation of the corresponding IP
      address mask
      :param int nr_bytes: Number of bytes in the address (4 for IPv4, 16 for
      IPv6)
      :return: Anonymized IP address
      :rtype: str