Merge remote-tracking branch 'origin/master' into gpeal/layer-type
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b097d3e..46c2e6f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# 4.2.2
+### Bugs Fixed
+* Removed allocations when setting paint alpha prior to API 29 ([#1929](https://github.com/airbnb/lottie-android/pull/1929))
+* Added application/x-zip and application/x-zip-compressed as recognized zip mime types ([#1950](https://github.com/airbnb/lottie-android/pull/1950))
+* Fixed a rare NPE in TransformKeyframeAnimation ([#1955](https://github.com/airbnb/lottie-android/pull/1955))
+
 # 4.2.1
 ### Features and Improvements
 * Upgraded to Compose 1.0.3 ([#1913](https://github.com/airbnb/lottie-android/pull/1913))
diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/TransformKeyframeAnimation.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/TransformKeyframeAnimation.java
index 5453d7b..fcab96c 100644
--- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/TransformKeyframeAnimation.java
+++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/TransformKeyframeAnimation.java
@@ -169,7 +169,7 @@
     BaseKeyframeAnimation<?, PointF> position = this.position;
     if (position != null) {
       PointF positionValue = position.getValue();
-      if (positionValue.x != 0 || positionValue.y != 0) {
+      if (positionValue != null && (positionValue.x != 0 || positionValue.y != 0)) {
         matrix.preTranslate(positionValue.x, positionValue.y);
       }
     }
diff --git a/lottie/src/main/java/com/airbnb/lottie/network/NetworkFetcher.java b/lottie/src/main/java/com/airbnb/lottie/network/NetworkFetcher.java
index 180260c..c9ae261 100644
--- a/lottie/src/main/java/com/airbnb/lottie/network/NetworkFetcher.java
+++ b/lottie/src/main/java/com/airbnb/lottie/network/NetworkFetcher.java
@@ -107,7 +107,10 @@
       // in the result which is more useful than failing here.
       contentType = "application/json";
     }
-    if (contentType.contains("application/zip") || url.split("\\?")[0].endsWith(".lottie")) {
+    if (contentType.contains("application/zip") ||
+        contentType.contains("application/x-zip") ||
+        contentType.contains("application/x-zip-compressed") ||
+        url.split("\\?")[0].endsWith(".lottie")) {
       Logger.debug("Handling zip response.");
       extension = FileExtension.ZIP;
       result = fromZipStream(url, inputStream, cacheKey);