          self._mask = None
          self._affine_matrix = None
          self._interpolator = None
  
          self._blur = dict()
          self._blur_kernel = 0
          self._threshold = 0.0
          self._sub_crop_size = 0
          self._sub_crop_slices: Dict[Literal["in", "out"], List[slice]] = {}
          self.set_blur_and_threshold()
          logger.trace("Initialized: %s", self.__class__.__name__)
 
</s> remove         self._mask = None
        self._affine_matrix = None
        self._interpolator = None
 </s> add         self._mask: Optional[bytes] = None
        self._affine_matrix: Optional[np.ndarray] = None
        self._interpolator: Optional[int] = None </s> remove         logger.trace("Initialized: %s", self.__class__.__name__)
 </s> add         logger.trace("Initialized: %s", self.__class__.__name__)  # type: ignore </s> remove         self._hashes_to_frame = dict()
        self._hashes_to_alignment = dict()
 </s> add         self._hashes_to_frame = {}
        self._hashes_to_alignment = {} </s> remove         self.x = x  # pylint:disable=invalid-name
        self.w = w  # pylint:disable=invalid-name
        self.y = y  # pylint:disable=invalid-name
        self.h = h  # pylint:disable=invalid-name
        self.landmarks_xy = landmarks_xy
        self.thumbnail = None
        self.mask = dict() if mask is None else mask
 </s> add         self.left = left
        self.width = width
        self.top = top
        self.height = height
        self._landmarks_xy = landmarks_xy
        self.thumbnail: Optional[np.ndarray] = None
        self.mask = {} if mask is None else mask </s> remove         self.aligned = None
        logger.trace("Initialized %s", self.__class__.__name__)
 </s> add         self._aligned: Optional[AlignedFace] = None
        logger.trace("Initialized %s", self.__class__.__name__)  # type: ignore
        self._blur_type: Optional[Literal["gaussian", "normalized"]] = None
        self._blur_passes: int = 0
        self._blur_kernel: Union[float, int] = 0
          self._mask = None
          self._affine_matrix = None
          self._interpolator = None
  
        self._blur_type: Optional[Literal["gaussian", "normalized"]] = None
        self._blur_passes: int = 0
        self._blur_kernel: Union[float, int] = 0
        self._blur_type: Optional[Literal["gaussian", "normalized"]] = None
        self._blur_passes: int = 0
        self._blur_kernel: Union[float, int] = 0
          self._threshold = 0.0
          self._sub_crop_size = 0
          self._sub_crop_slices: Dict[Literal["in", "out"], List[slice]] = {}
          self.set_blur_and_threshold()
          logger.trace("Initialized: %s", self.__class__.__name__)
keep keep keep keep replace replace keep keep keep keep keep
 lib.align updates:
  - alignments.py
    - Add typed dicts for imported alignments
    - Explicitly check for presence of thumb value in alignments dict
    - linting
  - detected_face.py
    - Typing
    - Linting
    - Legacy support for pre-aligned face
    - Update dependencies to new property names 
lib/align/detected_face.py