  
  if TYPE_CHECKING:
      from .aligned_face import CenteringType
  
  # VERSION TRACKING
  # 1.0 - Never really existed. Basically any alignments file prior to version 2.0
  # 2.0 - Implementation of full head extract. Any alignments version below this will have used
  #       legacy extract
  # 2.1 - Alignments data to extracted face PNG header. SHA1 hashes of faces no longer calculated
 
</s> remove logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
_VERSION = 2.2
 </s> add if sys.version_info < (3, 8):
    from typing_extensions import TypedDict
else:
    from typing import TypedDict </s> remove             self.thumbnail = alignment.get("thumb", None)
 </s> add             self.thumbnail = alignment.get("thumb") </s> remove         self.landmarks_xy = landmarks.copy()
 </s> add         self._landmarks_xy = landmarks.copy()
logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
_VERSION = 2.2
  
  if TYPE_CHECKING:
      from .aligned_face import CenteringType
  
logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
_VERSION = 2.2
  # VERSION TRACKING
  # 1.0 - Never really existed. Basically any alignments file prior to version 2.0
  # 2.0 - Implementation of full head extract. Any alignments version below this will have used
  #       legacy extract
  # 2.1 - Alignments data to extracted face PNG header. SHA1 hashes of faces no longer calculated
keep keep keep add 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/alignments.py