[go: nahoru, domu]

Plumb SkottiePropertyTextValueMap through rendering pipeline.

* Add text map as argument to canvas drawSkottie() methods.
* Add serialization/deserialization of text map (with a little
  refactoring to keep it "clean").
* Apply text map to skottie animation object.

Bug: b:217271404

Cq-Include-Trybots: luci.chrome.try:linux-chromeos-chrome
Change-Id: I7e69b652533d8048dca072d7b2290b0d5799e26b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3472277
Reviewed-by: Nico Weber <thakis@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Eric Sum <esum@google.com>
Cr-Commit-Position: refs/heads/main@{#973815}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 7e09976..86e24b4 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -899,6 +899,10 @@
     data_deps += [ "//clank/build/bot/filters:cc_unittests_filters" ]
   }
 
+  if (skia_support_skottie) {
+    data += [ "test/data/" ]
+  }
+
   if (is_fuchsia) {
     use_cfv2 = false
     additional_manifest_fragments = [
diff --git a/cc/paint/discardable_image_map_unittest.cc b/cc/paint/discardable_image_map_unittest.cc
index bd4fb0d..765bb73 100644
--- a/cc/paint/discardable_image_map_unittest.cc
+++ b/cc/paint/discardable_image_map_unittest.cc
@@ -1189,7 +1189,7 @@
   content_layer_client.add_draw_skottie(FakeContentLayerClient::SkottieData(
       CreateSkottie(gfx::Size(2048, 2048), /*duration_secs=*/1.f),
       /*dst=*/gfx::Rect(2048, 2048), /*t=*/0.1f, SkottieFrameDataMap(),
-      SkottieColorMap()));
+      SkottieColorMap(), SkottieTextPropertyValueMap()));
 
   scoped_refptr<DisplayItemList> display_list =
       content_layer_client.PaintContentsToDisplayList();
@@ -1219,7 +1219,7 @@
   content_layer_client.add_draw_skottie(FakeContentLayerClient::SkottieData(
       CreateSkottieFromString(kLottieDataWith2Assets),
       /*dst=*/gfx::Rect(1024, 0, 1024, 2048),
-      /*t=*/0.1f, images_in, SkottieColorMap()));
+      /*t=*/0.1f, images_in, SkottieColorMap(), SkottieTextPropertyValueMap()));
 
   scoped_refptr<DisplayItemList> display_list =
       content_layer_client.PaintContentsToDisplayList();
@@ -1259,7 +1259,7 @@
   content_layer_client.add_draw_skottie(FakeContentLayerClient::SkottieData(
       CreateSkottieFromString(kLottieDataWith2Assets),
       /*dst=*/visible_rect,
-      /*t=*/0.1f, images_in, SkottieColorMap()));
+      /*t=*/0.1f, images_in, SkottieColorMap(), SkottieTextPropertyValueMap()));
 
   scoped_refptr<DisplayItemList> display_list =
       content_layer_client.PaintContentsToDisplayList();
diff --git a/cc/paint/paint_canvas.h b/cc/paint/paint_canvas.h
index 3e05b74..bd32f3d 100644
--- a/cc/paint/paint_canvas.h
+++ b/cc/paint/paint_canvas.h
@@ -14,6 +14,7 @@
 #include "cc/paint/paint_image.h"
 #include "cc/paint/skottie_color_map.h"
 #include "cc/paint/skottie_frame_data.h"
+#include "cc/paint/skottie_text_property_value.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 
 class SkTextBlob;
@@ -192,7 +193,8 @@
                            const SkRect& dst,
                            float t,
                            SkottieFrameDataMap images,
-                           const SkottieColorMap& color_map) = 0;
+                           const SkottieColorMap& color_map,
+                           SkottieTextPropertyValueMap text_map) = 0;
 
   virtual void drawTextBlob(sk_sp<SkTextBlob> blob,
                             SkScalar x,
diff --git a/cc/paint/paint_op_buffer.cc b/cc/paint/paint_op_buffer.cc
index 900f5278..6d84ce09 100644
--- a/cc/paint/paint_op_buffer.cc
+++ b/cc/paint/paint_op_buffer.cc
@@ -691,6 +691,39 @@
   return helper.size();
 }
 
+namespace {
+
+template <typename T>
+void SerializeSkottieMap(
+    const base::flat_map<SkottieResourceIdHash, T>& map,
+    PaintOpWriter& helper,
+    const base::RepeatingCallback<void(const T&, PaintOpWriter&)>&
+        value_serializer) {
+  // Write the size of the map first so that we know how many entries to read
+  // from the buffer during deserialization.
+  helper.WriteSize(map.size());
+  for (const auto& [resource_id, val] : map) {
+    helper.WriteSize(resource_id.GetUnsafeValue());
+    value_serializer.Run(val, helper);
+  }
+}
+
+void SerializeSkottieFrameData(const SkM44& current_ctm,
+                               const SkottieFrameData& frame_data,
+                               PaintOpWriter& helper) {
+  // |scale_adjustment| is not ultimately used; Skottie handles image
+  // scale adjustment internally when rastering.
+  SkSize scale_adjustment = SkSize::MakeEmpty();
+  helper.Write(DrawImage(frame_data.image, /*use_dark_mode=*/false,
+                         SkIRect::MakeWH(frame_data.image.width(),
+                                         frame_data.image.height()),
+                         frame_data.quality, current_ctm),
+               &scale_adjustment);
+  helper.Write(frame_data.quality);
+}
+
+}  // namespace
+
 size_t DrawSkottieOp::Serialize(const PaintOp* base_op,
                                 void* memory,
                                 size_t size,
@@ -705,38 +738,32 @@
   helper.Write(op->skottie);
 
   SkottieFrameDataMap images_to_serialize = op->images;
-  // TODO(esum): Serialize/deserialize the |text_map| and use it in
-  // DrawSkottieOp::Raster().
   SkottieTextPropertyValueMap text_map_to_serialize = op->text_map;
   if (options.skottie_serialization_history) {
     options.skottie_serialization_history->FilterNewSkottieFrameState(
         *op->skottie, images_to_serialize, text_map_to_serialize);
   }
 
-  // Write number of images in the map first so that we know how many images to
-  // read from the buffer during deserialization.
-  helper.WriteSize(images_to_serialize.size());
-  for (const auto& image_asset_pair : images_to_serialize) {
-    const SkottieResourceIdHash& asset_id_hash = image_asset_pair.first;
-    const SkottieFrameData& frame_data = image_asset_pair.second;
-    helper.WriteSize(asset_id_hash.GetUnsafeValue());
-    // |scale_adjustment| is not ultimately used; Skottie handles image scale
-    // adjustment internally when rastering.
-    SkSize scale_adjustment = SkSize::MakeEmpty();
-    helper.Write(DrawImage(frame_data.image, /*use_dark_mode=*/false,
-                           SkIRect::MakeWH(frame_data.image.width(),
-                                           frame_data.image.height()),
-                           frame_data.quality, current_ctm),
-                 &scale_adjustment);
-    helper.Write(frame_data.quality);
-  }
-  // Write number of colors in the map first so that we know how many colors to
-  // read from the buffer during deserialization.
-  helper.WriteSize(op->color_map.size());
-  for (const auto& map_color : op->color_map) {
-    helper.WriteSize(map_color.first.GetUnsafeValue());
-    helper.Write(map_color.second);
-  }
+  SerializeSkottieMap(
+      images_to_serialize, helper,
+      base::BindRepeating(&SerializeSkottieFrameData, std::cref(current_ctm)));
+  SerializeSkottieMap(
+      op->color_map, helper,
+      base::BindRepeating([](const SkColor& color, PaintOpWriter& helper) {
+        helper.Write(color);
+      }));
+  SerializeSkottieMap(
+      text_map_to_serialize, helper,
+      base::BindRepeating([](const SkottieTextPropertyValue& text_property_val,
+                             PaintOpWriter& helper) {
+        helper.WriteSize(text_property_val.text().size());
+        // If there is not enough space in the underlying buffer, WriteData()
+        // will mark the |helper| as invalid and the buffer will keep growing
+        // until a max size is reached (currently 64MB which should be ample for
+        // text).
+        helper.WriteData(text_property_val.text().size(),
+                         text_property_val.text().c_str());
+      }));
   return helper.size();
 }
 
@@ -947,6 +974,8 @@
     reader_.Read(std::forward<Args>(args)...);
   }
 
+  void ReadData(size_t bytes, void* data) { reader_.ReadData(bytes, data); }
+
   void ReadSize(size_t* size) { reader_.ReadSize(size); }
 
   void AlignMemory(size_t alignment) { reader_.AlignMemory(alignment); }
@@ -1203,6 +1232,73 @@
   return deserializer.FinalizeOp();
 }
 
+namespace {
+
+// |max_map_size| is purely a safety mechanism to prevent disastrous behavior
+// (trying to allocate an enormous map, looping for long periods of time, etc)
+// in case the serialization buffer is corrupted somehow.
+template <typename T>
+bool DeserializeSkottieMap(
+    base::flat_map<SkottieResourceIdHash, T>& map,
+    absl::optional<size_t> max_map_size,
+    PaintOpDeserializer<DrawSkottieOp>& deserializer,
+    const base::RepeatingCallback<absl::optional<T>(
+        PaintOpDeserializer<DrawSkottieOp>&)>& value_deserializer) {
+  size_t map_size = 0;
+  deserializer.ReadSize(&map_size);
+  if (max_map_size && map_size > *max_map_size)
+    return false;
+
+  for (size_t i = 0; i < map_size; ++i) {
+    size_t resource_id_hash_raw = 0;
+    deserializer.ReadSize(&resource_id_hash_raw);
+    SkottieResourceIdHash resource_id_hash =
+        SkottieResourceIdHash::FromUnsafeValue(resource_id_hash_raw);
+    if (!resource_id_hash)
+      return false;
+
+    absl::optional<T> value = value_deserializer.Run(deserializer);
+    if (!value)
+      return false;
+
+    // Duplicate keys should not happen by design, but defend against it
+    // gracefully in case the underlying buffer is corrupted.
+    bool is_new_entry = map.emplace(resource_id_hash, std::move(*value)).second;
+    if (!is_new_entry)
+      return false;
+  }
+  return true;
+}
+
+absl::optional<SkottieFrameData> DeserializeSkottieFrameData(
+    PaintOpDeserializer<DrawSkottieOp>& deserializer) {
+  SkottieFrameData frame_data;
+  deserializer.Read(&frame_data.image);
+  if (!frame_data.image)
+    return absl::nullopt;
+
+  deserializer.Read(&frame_data.quality);
+  return frame_data;
+}
+
+absl::optional<SkColor> DeserializeSkottieColor(
+    PaintOpDeserializer<DrawSkottieOp>& deserializer) {
+  SkColor color = SK_ColorTRANSPARENT;
+  deserializer.Read(&color);
+  return color;
+}
+
+absl::optional<SkottieTextPropertyValue> DeserializeSkottieTextPropertyValue(
+    PaintOpDeserializer<DrawSkottieOp>& deserializer) {
+  size_t text_size = 0u;
+  deserializer.ReadSize(&text_size);
+  std::string text(text_size, char());
+  deserializer.ReadData(text_size, const_cast<char*>(text.c_str()));
+  return SkottieTextPropertyValue(std::move(text));
+}
+
+}  // namespace
+
 PaintOp* DrawSkottieOp::Deserialize(const volatile void* input,
                                     size_t input_size,
                                     void* output,
@@ -1223,59 +1319,23 @@
   if (!deserializer->skottie || !deserializer->skottie->is_valid())
     return deserializer.InvalidateAndFinalizeOp();
 
-  size_t num_images = 0;
-  deserializer.ReadSize(&num_images);
-  // In the off chance that there's a bug or corruption in the underlying
-  // buffer, |num_images| may be some invalid enormous value. Sanity check it
-  // with the animation to prevent looping below for long periods of time if an
-  // unexpected error happens.
   size_t num_assets_in_animation =
       deserializer->skottie->GetImageAssetMetadata().asset_storage().size();
-  if (num_images > num_assets_in_animation)
-    return deserializer.InvalidateAndFinalizeOp();
-
-  for (size_t i = 0; i < num_images; ++i) {
-    size_t asset_id_hash_raw = 0;
-    deserializer.ReadSize(&asset_id_hash_raw);
-    SkottieResourceIdHash asset_id_hash =
-        SkottieResourceIdHash::FromUnsafeValue(asset_id_hash_raw);
-
-    SkottieFrameData frame_data;
-    deserializer.Read(&frame_data.image);
-    deserializer.Read(&frame_data.quality);
-    if (!asset_id_hash || !frame_data.image)
-      return deserializer.InvalidateAndFinalizeOp();
-
-    // If we've inserted a duplicate, that means the buffer specifies 2
-    // different images for the same asset in this frame. This should not happen
-    // by design since |images| is a map with the asset id as the key. But
-    // defend against it gracefully in case the underlying buffer is corrupted.
-    bool new_entry =
-        deserializer->images.emplace(asset_id_hash, std::move(frame_data))
-            .second;
-    if (!new_entry)
-      return deserializer.InvalidateAndFinalizeOp();
-  }
-
-  size_t num_map_colors = 0u;
-  deserializer.ReadSize(&num_map_colors);
-  for (size_t i = 0u; i < num_map_colors; ++i) {
-    size_t node_name_hash_raw = 0u;
-    deserializer.ReadSize(&node_name_hash_raw);
-    const SkottieResourceIdHash node_name_hash =
-        SkottieResourceIdHash::FromUnsafeValue(node_name_hash_raw);
-
-    SkColor color = SK_ColorTRANSPARENT;
-    deserializer.Read(&color);
-    // If we are inserting a duplicate, that means the buffer specifies two
-    // colors for the same node name hash. This should not happen, by design,
-    // because |color_map| is a map with the node name hash as the key. But
-    // defend against it gracefully in case the underlying buffer is corrupted.
-    if (!deserializer->color_map.emplace(node_name_hash, color).second)
-      return deserializer.InvalidateAndFinalizeOp();
-  }
-
-  return deserializer.FinalizeOp();
+  size_t num_text_nodes_in_animation =
+      deserializer->skottie->GetTextNodeNames().size();
+  bool deserialized_all_maps =
+      DeserializeSkottieMap(
+          deserializer->images, /*max_map_size=*/num_assets_in_animation,
+          deserializer, base::BindRepeating(&DeserializeSkottieFrameData)) &&
+      DeserializeSkottieMap(deserializer->color_map,
+                            /*max_map_size=*/absl::nullopt, deserializer,
+                            base::BindRepeating(&DeserializeSkottieColor)) &&
+      DeserializeSkottieMap(
+          deserializer->text_map, /*max_map_size=*/num_text_nodes_in_animation,
+          deserializer,
+          base::BindRepeating(&DeserializeSkottieTextPropertyValue));
+  return deserialized_all_maps ? deserializer.FinalizeOp()
+                               : deserializer.InvalidateAndFinalizeOp();
 }
 
 PaintOp* DrawTextBlobOp::Deserialize(const volatile void* input,
@@ -1698,7 +1758,7 @@
       canvas, op->t, op->dst,
       base::BindRepeating(&DrawSkottieOp::GetImageAssetForRaster,
                           base::Unretained(op), canvas, std::cref(params)),
-      op->color_map);
+      op->color_map, op->text_map);
 }
 
 SkottieWrapper::FrameDataFetchResult DrawSkottieOp::GetImageAssetForRaster(
@@ -2196,6 +2256,10 @@
 
   if (left->color_map != right->color_map)
     return false;
+
+  if (left->text_map != right->text_map)
+    return false;
+
   return true;
 }
 
@@ -2734,13 +2798,15 @@
                              SkRect dst,
                              float t,
                              SkottieFrameDataMap images,
-                             const SkottieColorMap& color_map)
+                             const SkottieColorMap& color_map,
+                             SkottieTextPropertyValueMap text_map)
     : PaintOp(kType),
       skottie(std::move(skottie)),
       dst(dst),
       t(t),
       images(std::move(images)),
-      color_map(color_map) {}
+      color_map(color_map),
+      text_map(std::move(text_map)) {}
 
 DrawSkottieOp::DrawSkottieOp() : PaintOp(kType) {}
 
diff --git a/cc/paint/paint_op_buffer.h b/cc/paint/paint_op_buffer.h
index 293b5f6..528e71d 100644
--- a/cc/paint/paint_op_buffer.h
+++ b/cc/paint/paint_op_buffer.h
@@ -819,7 +819,8 @@
                 SkRect dst,
                 float t,
                 SkottieFrameDataMap images,
-                const SkottieColorMap& color_map);
+                const SkottieColorMap& color_map,
+                SkottieTextPropertyValueMap text_map);
   ~DrawSkottieOp();
   static void Raster(const DrawSkottieOp* op,
                      SkCanvas* canvas,
diff --git a/cc/paint/paint_op_buffer_unittest.cc b/cc/paint/paint_op_buffer_unittest.cc
index 537164a..8ede6e3 100644
--- a/cc/paint/paint_op_buffer_unittest.cc
+++ b/cc/paint/paint_op_buffer_unittest.cc
@@ -23,6 +23,7 @@
 #include "cc/paint/paint_op_writer.h"
 #include "cc/paint/shader_transfer_cache_entry.h"
 #include "cc/paint/skottie_resource_metadata.h"
+#include "cc/paint/skottie_text_property_value.h"
 #include "cc/paint/skottie_wrapper.h"
 #include "cc/paint/transfer_cache_entry.h"
 #include "cc/test/lottie_test_data.h"
@@ -1235,30 +1236,8 @@
 
 #if BUILDFLAG(SKIA_SUPPORT_SKOTTIE)
 bool kIsSkottieSupported = true;
-
-std::vector<scoped_refptr<SkottieWrapper>> test_skotties = {
-    CreateSkottie(gfx::Size(10, 20), 4), CreateSkottie(gfx::Size(100, 40), 5),
-    CreateSkottie(gfx::Size(80, 70), 6),
-    CreateSkottieFromString(kLottieDataWith2Assets)};
-std::vector<float> test_skottie_floats = {0, 0.1f, 1.f, 0.2f};
-std::vector<SkRect> test_skottie_rects = {
-    SkRect::MakeXYWH(10, 20, 30, 40), SkRect::MakeXYWH(0, 5, 10, 20),
-    SkRect::MakeXYWH(6, 0, 3, 50), SkRect::MakeXYWH(10, 10, 100, 100)};
-std::vector<SkottieColorMap> test_skottie_color_maps = {
-    {SkottieMapColor("green", SK_ColorGREEN),
-     SkottieMapColor("yellow", SK_ColorYELLOW),
-     SkottieMapColor("red", SK_ColorRED),
-     SkottieMapColor("blue", SK_ColorBLUE)},
-    {},
-    {SkottieMapColor("", SK_ColorGREEN)},
-    {SkottieMapColor("", SK_ColorTRANSPARENT)}};
 #else
 bool kIsSkottieSupported = false;
-
-std::vector<scoped_refptr<SkottieWrapper>> test_skotties;
-std::vector<float> test_skottie_floats;
-std::vector<SkRect> test_skottie_rects;
-std::vector<SkottieColorMap> test_skottie_color_maps;
 #endif
 
 // Writes as many ops in |buffer| as can fit in |output_size| to |output|.
@@ -1570,13 +1549,52 @@
 }
 
 void PushDrawSkottieOps(PaintOpBuffer* buffer) {
+  std::vector<scoped_refptr<SkottieWrapper>> test_skotties;
+  std::vector<float> test_skottie_floats;
+  std::vector<SkRect> test_skottie_rects;
+  std::vector<SkottieColorMap> test_skottie_color_maps;
+  std::vector<SkottieTextPropertyValueMap> test_skottie_text_maps;
+  if (kIsSkottieSupported) {
+    test_skotties = {
+        CreateSkottie(gfx::Size(10, 20), 4),
+        CreateSkottie(gfx::Size(100, 40), 5),
+        CreateSkottie(gfx::Size(80, 70), 6),
+        CreateSkottieFromString(kLottieDataWith2Assets),
+        CreateSkottieFromTestDataDir(kLottieDataWith2TextFileName)};
+    test_skottie_floats = {0, 0.1f, 1.f, 0.2f, 0.3f};
+    test_skottie_rects = {
+        SkRect::MakeXYWH(10, 20, 30, 40), SkRect::MakeXYWH(0, 5, 10, 20),
+        SkRect::MakeXYWH(6, 0, 3, 50), SkRect::MakeXYWH(10, 10, 100, 100),
+        SkRect::MakeXYWH(5, 5, 50, 50)};
+    test_skottie_color_maps = {
+        {SkottieMapColor("green", SK_ColorGREEN),
+         SkottieMapColor("yellow", SK_ColorYELLOW),
+         SkottieMapColor("red", SK_ColorRED),
+         SkottieMapColor("blue", SK_ColorBLUE)},
+        {},
+        {SkottieMapColor("green", SK_ColorGREEN)},
+        {SkottieMapColor("transparent", SK_ColorTRANSPARENT)},
+        {}};
+    test_skottie_text_maps = {
+        {},
+        {},
+        {},
+        {},
+        {{HashSkottieResourceId(kLottieDataWith2TextNode1),
+          SkottieTextPropertyValue(
+              std::string(kLottieDataWith2TextNode1Text.data()))},
+         {HashSkottieResourceId(kLottieDataWith2TextNode2),
+          SkottieTextPropertyValue(
+              std::string(kLottieDataWith2TextNode2Text.data()))}}};
+  }
+
   size_t len = std::min(test_skotties.size(), test_flags.size());
   for (size_t i = 0; i < len; i++) {
     buffer->push<DrawSkottieOp>(
         test_skotties[i], test_skottie_rects[i], test_skottie_floats[i],
         GetTestImagesForSkottie(*test_skotties[i], test_skottie_rects[i],
                                 PaintFlags::FilterQuality::kHigh, /*t=*/0),
-        test_skottie_color_maps[i]);
+        test_skottie_color_maps[i], test_skottie_text_maps[i]);
   }
   ValidateOps<DrawSkottieOp>(buffer);
 }
@@ -3497,7 +3515,7 @@
       skottie, input_rect, input_t,
       GetTestImagesForSkottie(*skottie, input_rect,
                               PaintFlags::FilterQuality::kHigh, input_t),
-      SkottieColorMap());
+      SkottieColorMap(), SkottieTextPropertyValueMap());
 
   // Serialize
   TestOptionsProvider options_provider;
@@ -3524,7 +3542,8 @@
       CreateSkottie(gfx::Size(100, 100), /*duration_secs=*/5);
   SkRect skottie_rect = SkRect::MakeWH(100, 100);
   DrawSkottieOp skottie_op(skottie, skottie_rect, /*t=*/0.1,
-                           /*images=*/SkottieFrameDataMap(), SkottieColorMap());
+                           /*images=*/SkottieFrameDataMap(), SkottieColorMap(),
+                           SkottieTextPropertyValueMap());
   PlaybackParams playback_params(/*image_provider=*/nullptr);
   {
     NiceMock<MockCanvas> canvas;
@@ -3541,7 +3560,7 @@
       *skottie, skottie_rect, PaintFlags::FilterQuality::kHigh, /*t=*/0.1f);
   ASSERT_FALSE(images_in.empty());
   DrawSkottieOp skottie_op(skottie, skottie_rect, /*t=*/0.1, images_in,
-                           SkottieColorMap());
+                           SkottieColorMap(), SkottieTextPropertyValueMap());
   PlaybackParams playback_params(/*image_provider=*/nullptr);
   {
     NiceMock<MockCanvas> canvas;
@@ -3573,7 +3592,7 @@
         *skottie, skottie_rect, PaintFlags::FilterQuality::kHigh, /*t=*/0.25f);
     ASSERT_THAT(images_in, Contains(Key(HashSkottieResourceId("image_0"))));
     DrawSkottieOp skottie_op(skottie, skottie_rect, /*t=*/0.25, images_in,
-                             SkottieColorMap());
+                             SkottieColorMap(), SkottieTextPropertyValueMap());
     NiceMock<MockCanvas> canvas;
     EXPECT_CALL(canvas, onDrawImage2(NotNull(), _, _, _, _)).Times(AtLeast(1));
     DrawSkottieOp::Raster(&skottie_op, &canvas, playback_params);
@@ -3587,7 +3606,7 @@
         *skottie, skottie_rect, PaintFlags::FilterQuality::kHigh, /*t=*/0.75f);
     ASSERT_THAT(images_in, Contains(Key(HashSkottieResourceId("image_1"))));
     DrawSkottieOp skottie_op(skottie, skottie_rect, /*t=*/0.75, images_in,
-                             SkottieColorMap());
+                             SkottieColorMap(), SkottieTextPropertyValueMap());
     NiceMock<MockCanvas> canvas;
     EXPECT_CALL(canvas, onDrawImage2(NotNull(), _, _, _, _)).Times(AtLeast(1));
     DrawSkottieOp::Raster(&skottie_op, &canvas, playback_params);
@@ -3603,7 +3622,7 @@
   buffer.push<DrawSkottieOp>(
       CreateSkottie(gfx::Size(100, 100), /*duration_secs=*/1),
       /*dst=*/SkRect::MakeWH(100, 100), /*t=*/0.1f, SkottieFrameDataMap(),
-      SkottieColorMap());
+      SkottieColorMap(), SkottieTextPropertyValueMap());
   EXPECT_FALSE(buffer.HasDiscardableImages());
 }
 
@@ -3616,14 +3635,15 @@
       *skottie, skottie_rect, PaintFlags::FilterQuality::kHigh, /*t=*/0.1f);
   ASSERT_FALSE(images_in.empty());
   buffer.push<DrawSkottieOp>(skottie, skottie_rect, /*t=*/0.1f, images_in,
-                             SkottieColorMap());
+                             SkottieColorMap(), SkottieTextPropertyValueMap());
   EXPECT_TRUE(buffer.HasDiscardableImages());
 }
 
 TEST(PaintOpBufferTest, OpHasDiscardableImagesSkottieOpNoImages) {
   DrawSkottieOp op(CreateSkottie(gfx::Size(100, 100), /*duration_secs=*/1),
                    /*dst=*/SkRect::MakeWH(100, 100), /*t=*/0.1f,
-                   SkottieFrameDataMap(), SkottieColorMap());
+                   SkottieFrameDataMap(), SkottieColorMap(),
+                   SkottieTextPropertyValueMap());
   EXPECT_FALSE(PaintOp::OpHasDiscardableImages(&op));
 }
 
@@ -3635,7 +3655,7 @@
       *skottie, skottie_rect, PaintFlags::FilterQuality::kHigh, /*t=*/0.1f);
   ASSERT_FALSE(images_in.empty());
   DrawSkottieOp op(skottie, skottie_rect, /*t=*/0.1f, images_in,
-                   SkottieColorMap());
+                   SkottieColorMap(), SkottieTextPropertyValueMap());
   EXPECT_TRUE(PaintOp::OpHasDiscardableImages(&op));
 }
 #endif  // BUILDFLAG(SKIA_SUPPORT_SKOTTIE)
diff --git a/cc/paint/record_paint_canvas.cc b/cc/paint/record_paint_canvas.cc
index e1bd846..4938ba5 100644
--- a/cc/paint/record_paint_canvas.cc
+++ b/cc/paint/record_paint_canvas.cc
@@ -315,8 +315,10 @@
                                     const SkRect& dst,
                                     float t,
                                     SkottieFrameDataMap images,
-                                    const SkottieColorMap& color_map) {
-  push<DrawSkottieOp>(std::move(skottie), dst, t, std::move(images), color_map);
+                                    const SkottieColorMap& color_map,
+                                    SkottieTextPropertyValueMap text_map) {
+  push<DrawSkottieOp>(std::move(skottie), dst, t, std::move(images), color_map,
+                      std::move(text_map));
 }
 
 void RecordPaintCanvas::drawTextBlob(sk_sp<SkTextBlob> blob,
diff --git a/cc/paint/record_paint_canvas.h b/cc/paint/record_paint_canvas.h
index 504a70e..31d36d5 100644
--- a/cc/paint/record_paint_canvas.h
+++ b/cc/paint/record_paint_canvas.h
@@ -100,7 +100,8 @@
                    const SkRect& dst,
                    float t,
                    SkottieFrameDataMap images,
-                   const SkottieColorMap& color_map) override;
+                   const SkottieColorMap& color_map,
+                   SkottieTextPropertyValueMap text_map) override;
   void drawTextBlob(sk_sp<SkTextBlob> blob,
                     SkScalar x,
                     SkScalar y,
diff --git a/cc/paint/skia_paint_canvas.cc b/cc/paint/skia_paint_canvas.cc
index 105c031..b14e41ed 100644
--- a/cc/paint/skia_paint_canvas.cc
+++ b/cc/paint/skia_paint_canvas.cc
@@ -324,7 +324,8 @@
                                   const SkRect& dst,
                                   float t,
                                   SkottieFrameDataMap images,
-                                  const SkottieColorMap& color_map) {
+                                  const SkottieColorMap& color_map,
+                                  SkottieTextPropertyValueMap text_map) {
   if (!images.empty()) {
     // This is not implemented solely because there's no use case yet. To
     // implement, we could retrieve the underlying SkImage from each
@@ -333,8 +334,8 @@
         << "Rendering skottie frames with image assets directly to a "
            "SkiaPaintCanvas is currently not supported.";
   }
-  skottie->Draw(canvas_, t, dst, SkottieWrapper::FrameDataCallback(),
-                color_map);
+  skottie->Draw(canvas_, t, dst, SkottieWrapper::FrameDataCallback(), color_map,
+                std::move(text_map));
 }
 
 void SkiaPaintCanvas::drawTextBlob(sk_sp<SkTextBlob> blob,
diff --git a/cc/paint/skia_paint_canvas.h b/cc/paint/skia_paint_canvas.h
index 681627f..0720e24 100644
--- a/cc/paint/skia_paint_canvas.h
+++ b/cc/paint/skia_paint_canvas.h
@@ -122,7 +122,8 @@
                    const SkRect& dst,
                    float t,
                    SkottieFrameDataMap images,
-                   const SkottieColorMap& color_map) override;
+                   const SkottieColorMap& color_map,
+                   SkottieTextPropertyValueMap text_map) override;
   void drawTextBlob(sk_sp<SkTextBlob> blob,
                     SkScalar x,
                     SkScalar y,
diff --git a/cc/paint/skottie_wrapper.h b/cc/paint/skottie_wrapper.h
index 9ab14cd..1291926 100644
--- a/cc/paint/skottie_wrapper.h
+++ b/cc/paint/skottie_wrapper.h
@@ -5,14 +5,17 @@
 #ifndef CC_PAINT_SKOTTIE_WRAPPER_H_
 #define CC_PAINT_SKOTTIE_WRAPPER_H_
 
+#include <string>
 #include <vector>
 
 #include "base/callback.h"
+#include "base/containers/flat_set.h"
 #include "base/containers/span.h"
 #include "base/memory/ref_counted.h"
 #include "cc/paint/paint_export.h"
 #include "cc/paint/skottie_color_map.h"
 #include "cc/paint/skottie_resource_metadata.h"
+#include "cc/paint/skottie_text_property_value.h"
 #include "third_party/skia/include/core/SkRefCnt.h"
 #include "third_party/skia/include/core/SkSamplingOptions.h"
 
@@ -53,6 +56,16 @@
   // does not change during SkottieWrapper's lifetime.
   virtual const SkottieResourceMetadataMap& GetImageAssetMetadata() const = 0;
 
+  // Returns the set of text nodes in the animation. There shall be an entry in
+  // GetCurrentTextPropertyValues() for each returned node. The returned set is
+  // immutable and does not change during SkottieWrapper's lifetime.
+  virtual const base::flat_set<std::string>& GetTextNodeNames() const = 0;
+
+  // Returns the set of all text nodes in the animation, along with their
+  // corresponding current values. The nodes' values can only be updated via
+  // the |text_map| argument in Draw().
+  virtual SkottieTextPropertyValueMap GetCurrentTextPropertyValues() const = 0;
+
   // FrameDataCallback is implemented by the caller and invoked
   // synchronously during calls to Seek() and Draw(). The callback is used by
   // SkottieWrapper to fetch the corresponding image for each asset that is
@@ -90,11 +103,16 @@
 
   // A thread safe call that will draw an image with bounds |rect| for the
   // frame at normalized time instant |t| onto the |canvas|.
+  //
+  // |text_map| may be an incremental update and only contain a subset of the
+  // text nodes in the animation. If a text node is absent from |text_map|, it
+  // will maintain the same contents as the previous call to Draw().
   virtual void Draw(SkCanvas* canvas,
                     float t,
                     const SkRect& rect,
                     FrameDataCallback frame_data_cb,
-                    const SkottieColorMap& color_map) = 0;
+                    const SkottieColorMap& color_map,
+                    const SkottieTextPropertyValueMap& text_map) = 0;
 
   virtual float duration() const = 0;
   virtual SkSize size() const = 0;
diff --git a/cc/paint/skottie_wrapper_impl.cc b/cc/paint/skottie_wrapper_impl.cc
index 7b7ae4a..dc7e7cf 100644
--- a/cc/paint/skottie_wrapper_impl.cc
+++ b/cc/paint/skottie_wrapper_impl.cc
@@ -45,20 +45,49 @@
   }
 };
 
-class ColorMapHandler final : public skottie::PropertyObserver {
+class PropertyHandler final : public skottie::PropertyObserver {
  public:
-  ColorMapHandler() = default;
-  ColorMapHandler(const ColorMapHandler&) = delete;
-  ColorMapHandler& operator=(const ColorMapHandler&) = delete;
-  ~ColorMapHandler() override = default;
+  PropertyHandler() = default;
+  PropertyHandler(const PropertyHandler&) = delete;
+  PropertyHandler& operator=(const PropertyHandler&) = delete;
+  ~PropertyHandler() override = default;
 
   void ApplyColorMap(const SkottieColorMap& color_map) {
     for (const auto& map_color : color_map) {
-      for (auto& handle : color_handles_[map_color.first])
+      for (auto& handle : color_handles_[map_color.first]) {
+        DCHECK(handle);
         handle->set(map_color.second);
+      }
     }
   }
 
+  void ApplyTextMap(const SkottieTextPropertyValueMap& text_map) {
+    for (const auto& [node_name_hash, new_text_val] : text_map) {
+      auto current_text_values_iter = current_text_values_.find(node_name_hash);
+      if (current_text_values_iter == current_text_values_.end()) {
+        LOG(WARNING) << "Encountered unknown text node with hash: "
+                     << node_name_hash;
+        continue;
+      }
+      current_text_values_iter->second = new_text_val;
+
+      for (auto& handle : text_handles_[node_name_hash]) {
+        DCHECK(handle);
+        skottie::TextPropertyValue current_text_val = handle->get();
+        ConvertTextValueToSkottie(new_text_val, current_text_val);
+        handle->set(std::move(current_text_val));
+      }
+    }
+  }
+
+  const SkottieTextPropertyValueMap& current_text_values() const {
+    return current_text_values_;
+  }
+
+  const base::flat_set<std::string>& text_node_names() const {
+    return text_node_names_;
+  }
+
   // skottie::PropertyObserver:
   void onColorProperty(
       const char node_name[],
@@ -67,10 +96,41 @@
       color_handles_[HashSkottieResourceId(node_name)].push_back(lh());
   }
 
+  void onTextProperty(
+      const char node_name[],
+      const LazyHandle<skottie::TextPropertyHandle>& lh) override {
+    if (!node_name)
+      return;
+
+    text_node_names_.insert(node_name);
+    SkottieResourceIdHash node_name_hash = HashSkottieResourceId(node_name);
+    auto text_handle = lh();
+    current_text_values_.emplace(
+        node_name_hash, ConvertTextValueToChromium(text_handle->get()));
+    text_handles_[node_name_hash].push_back(std::move(text_handle));
+  }
+
  private:
+  static SkottieTextPropertyValue ConvertTextValueToChromium(
+      const skottie::TextPropertyValue& value_in) {
+    std::string text(value_in.fText.c_str());
+    return SkottieTextPropertyValue(std::move(text));
+  }
+
+  static void ConvertTextValueToSkottie(
+      const SkottieTextPropertyValue& value_in,
+      skottie::TextPropertyValue& value_out) {
+    value_out.fText.set(value_in.text().c_str());
+  }
+
   base::flat_map<SkottieResourceIdHash,
                  std::vector<std::unique_ptr<skottie::ColorPropertyHandle>>>
       color_handles_;
+  base::flat_map<SkottieResourceIdHash,
+                 std::vector<std::unique_ptr<skottie::TextPropertyHandle>>>
+      text_handles_;
+  base::flat_set<std::string> text_node_names_;
+  SkottieTextPropertyValueMap current_text_values_;
 };
 
 class SkottieWrapperImpl : public SkottieWrapper {
@@ -102,6 +162,18 @@
     return image_asset_metadata_;
   }
 
+  const base::flat_set<std::string>& GetTextNodeNames() const override
+      LOCKS_EXCLUDED(lock_) {
+    base::AutoLock lock(lock_);
+    return property_handler_->text_node_names();
+  }
+
+  SkottieTextPropertyValueMap GetCurrentTextPropertyValues() const override
+      LOCKS_EXCLUDED(lock_) {
+    base::AutoLock lock(lock_);
+    return property_handler_->current_text_values();
+  }
+
   void Seek(float t, FrameDataCallback frame_data_cb) override
       LOCKS_EXCLUDED(lock_) {
     base::AutoLock lock(lock_);
@@ -116,10 +188,13 @@
             float t,
             const SkRect& rect,
             FrameDataCallback frame_data_cb,
-            const SkottieColorMap& color_map) override LOCKS_EXCLUDED(lock_) {
+            const SkottieColorMap& color_map,
+            const SkottieTextPropertyValueMap& text_map) override
+      LOCKS_EXCLUDED(lock_) {
     base::AutoLock lock(lock_);
     current_frame_data_cb_ = std::move(frame_data_cb);
-    color_map_handler_->ApplyColorMap(color_map);
+    property_handler_->ApplyColorMap(color_map);
+    property_handler_->ApplyTextMap(text_map);
     animation_->seek(t);
     animation_->render(canvas, &rect);
   }
@@ -140,11 +215,11 @@
       base::span<const uint8_t> data,
       std::vector<uint8_t> raw_data,
       const sk_sp<SkottieMRUResourceProvider>& mru_resource_provider)
-      : color_map_handler_(sk_make_sp<ColorMapHandler>()),
+      : property_handler_(sk_make_sp<PropertyHandler>()),
         animation_(
             skottie::Animation::Builder()
                 .setLogger(sk_make_sp<SkottieLogWriter>())
-                .setPropertyObserver(color_map_handler_)
+                .setPropertyObserver(property_handler_)
                 .setResourceProvider(skresources::CachingResourceProvider::Make(
                     mru_resource_provider))
                 .make(reinterpret_cast<const char*>(data.data()), data.size())),
@@ -169,9 +244,9 @@
                                       sampling_out);
   }
 
-  base::Lock lock_;
+  mutable base::Lock lock_;
   FrameDataCallback current_frame_data_cb_ GUARDED_BY(lock_);
-  sk_sp<ColorMapHandler> color_map_handler_;
+  sk_sp<PropertyHandler> property_handler_ GUARDED_BY(lock_);
   sk_sp<skottie::Animation> animation_;
 
   // The raw byte data is stored for serialization across OOP-R. This is only
diff --git a/cc/paint/skottie_wrapper_unittest.cc b/cc/paint/skottie_wrapper_unittest.cc
index 3a5c354..b47c2ef 100644
--- a/cc/paint/skottie_wrapper_unittest.cc
+++ b/cc/paint/skottie_wrapper_unittest.cc
@@ -141,13 +141,15 @@
   EXPECT_CALL(mock_callback,
               OnAssetLoaded(HashSkottieResourceId("image_0"), _, _, _));
   skottie->Draw(&canvas, /*t=*/0.25, SkRect::MakeWH(500, 500),
-                mock_callback.Get(), SkottieColorMap());
+                mock_callback.Get(), SkottieColorMap(),
+                SkottieTextPropertyValueMap());
   Mock::VerifyAndClearExpectations(&mock_callback);
 
   EXPECT_CALL(mock_callback,
               OnAssetLoaded(HashSkottieResourceId("image_1"), _, _, _));
   skottie->Draw(&canvas, /*t=*/0.75, SkRect::MakeWH(500, 500),
-                mock_callback.Get(), SkottieColorMap());
+                mock_callback.Get(), SkottieColorMap(),
+                SkottieTextPropertyValueMap());
   Mock::VerifyAndClearExpectations(&mock_callback);
 }
 
@@ -158,7 +160,8 @@
   // Just verify that this call does not cause a CHECK failure.
   ::testing::NiceMock<MockCanvas> canvas;
   skottie->Draw(&canvas, /*t=*/0, SkRect::MakeWH(500, 500),
-                SkottieWrapper::FrameDataCallback(), SkottieColorMap());
+                SkottieWrapper::FrameDataCallback(), SkottieColorMap(),
+                SkottieTextPropertyValueMap());
 }
 
 TEST(SkottieWrapperTest, LoadsCorrectAssetsForSeek) {
@@ -178,5 +181,54 @@
   Mock::VerifyAndClearExpectations(&mock_callback);
 }
 
+TEST(SkottieWrapperTest, LoadsTextNodes) {
+  auto skottie = CreateSkottieFromTestDataDir(kLottieDataWith2TextFileName);
+  ASSERT_TRUE(skottie->is_valid());
+  EXPECT_THAT(skottie->GetTextNodeNames(),
+              UnorderedElementsAre(kLottieDataWith2TextNode1,
+                                   kLottieDataWith2TextNode2));
+  EXPECT_THAT(skottie->GetCurrentTextPropertyValues(),
+              UnorderedElementsAre(
+                  Pair(HashSkottieResourceId(kLottieDataWith2TextNode1),
+                       SkottieTextPropertyValue(
+                           std::string(kLottieDataWith2TextNode1Text))),
+                  Pair(HashSkottieResourceId(kLottieDataWith2TextNode2),
+                       SkottieTextPropertyValue(
+                           std::string(kLottieDataWith2TextNode2Text)))));
+}
+
+TEST(SkottieWrapperTest, SetsTextNodesWithDraw) {
+  auto skottie = CreateSkottieFromTestDataDir(kLottieDataWith2TextFileName);
+  ASSERT_TRUE(skottie->is_valid());
+  ::testing::NiceMock<MockCanvas> canvas;
+
+  SkottieTextPropertyValueMap text_map = {
+      {HashSkottieResourceId(kLottieDataWith2TextNode1),
+       SkottieTextPropertyValue("new-test-text-1")},
+      {HashSkottieResourceId(kLottieDataWith2TextNode2),
+       SkottieTextPropertyValue("new-test-text-2")}};
+  skottie->Draw(&canvas, /*t=*/0, SkRect::MakeWH(500, 500),
+                SkottieWrapper::FrameDataCallback(), SkottieColorMap(),
+                text_map);
+  EXPECT_THAT(skottie->GetCurrentTextPropertyValues(),
+              UnorderedElementsAre(
+                  Pair(HashSkottieResourceId(kLottieDataWith2TextNode1),
+                       SkottieTextPropertyValue("new-test-text-1")),
+                  Pair(HashSkottieResourceId(kLottieDataWith2TextNode2),
+                       SkottieTextPropertyValue("new-test-text-2"))));
+
+  text_map = {{HashSkottieResourceId(kLottieDataWith2TextNode2),
+               SkottieTextPropertyValue("new-test-text-2b")}};
+  skottie->Draw(&canvas, /*t=*/0.1, SkRect::MakeWH(500, 500),
+                SkottieWrapper::FrameDataCallback(), SkottieColorMap(),
+                text_map);
+  EXPECT_THAT(skottie->GetCurrentTextPropertyValues(),
+              UnorderedElementsAre(
+                  Pair(HashSkottieResourceId(kLottieDataWith2TextNode1),
+                       SkottieTextPropertyValue("new-test-text-1")),
+                  Pair(HashSkottieResourceId(kLottieDataWith2TextNode2),
+                       SkottieTextPropertyValue("new-test-text-2b"))));
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/test/data/lottie/animation_with_2_text_nodes.json b/cc/test/data/lottie/animation_with_2_text_nodes.json
new file mode 100644
index 0000000..5c863359
--- /dev/null
+++ b/cc/test/data/lottie/animation_with_2_text_nodes.json
@@ -0,0 +1 @@
+{"v":"5.8.1","fr":60,"ip":0,"op":361,"w":1920,"h":1500,"nm":"Text test","ddd":0,"assets":[],"fonts":{"list":[{"fName":"Roboto-Regular","fFamily":"Roboto","fStyle":"Regular","ascent":75}]},"layers":[{"ddd":0,"ind":5,"ty":5,"nm":"text_node_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1343.782,1245.103,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"sz":[1063.32983398438,35.2400398254395],"ps":[-531.664916992188,-17.6200199127197],"s":19,"f":"Roboto-Regular","t":"test_text_2","ca":0,"j":1,"tr":5,"lh":16,"ls":0,"fc":[0.373,0.388,0.408]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":60,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":5,"nm":"text_node_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1343.782,1245.103,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"t":{"d":{"k":[{"s":{"sz":[1063.32983398438,35.2400398254395],"ps":[-531.664916992188,-17.6200199127197],"s":19,"f":"Roboto-Regular","t":"test_text_1","ca":0,"j":1,"tr":5,"lh":16,"ls":0,"fc":[0.373,0.388,0.408]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":1,"nm":"White Solid 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,750,0],"ix":2,"l":2},"a":{"a":0,"k":[960,750,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":1920,"sh":1500,"sc":"#ffffff","ip":0,"op":600,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"©","size":19,"style":"Regular","w":78.56,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.53,-1.399],[2.995,0],[1.465,1.074],[0.748,1.904],[0,2.474],[0,0],[-0.749,1.904],[-1.465,1.074],[-2.148,0],[-1.546,-1.399],[0,-3.223],[0,0],[2.93,2.539],[4.98,0],[2.522,-1.595],[1.383,-2.832],[0,-3.743],[0,0],[-1.384,-2.832],[-2.523,-1.595],[-3.451,0],[-2.914,2.556],[0,5.111],[0,0]],"o":[[-1.53,1.4],[-2.148,0],[-1.465,-1.074],[-0.749,-1.904],[0,0],[0,-2.441],[0.748,-1.904],[1.465,-1.074],[2.995,0],[1.546,1.4],[0,0],[0,-5.11],[-2.93,-2.539],[-3.451,0],[-2.523,1.595],[-1.384,2.832],[0,0],[0,3.744],[1.383,2.832],[2.522,1.595],[4.98,0],[2.913,-2.555],[0,0],[0,3.255]],"v":[[45.264,-22.217],[38.477,-20.117],[33.057,-21.729],[29.736,-26.196],[28.613,-32.764],[28.613,-38.428],[29.736,-44.946],[33.057,-49.414],[38.477,-51.025],[45.288,-48.926],[47.607,-41.992],[54.736,-41.992],[50.342,-53.467],[38.477,-57.275],[29.517,-54.883],[23.657,-48.242],[21.582,-38.379],[21.582,-32.764],[23.657,-22.9],[29.517,-16.26],[38.477,-13.867],[50.317,-17.7],[54.688,-29.199],[47.559,-29.199]],"c":true},"ix":2},"nm":"©","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-1.498,3.711],[-2.67,2.783],[-3.516,1.546],[-4.004,0],[-3.5,-1.546],[-2.654,-2.783],[-1.498,-3.711],[0,-4.362],[1.497,-3.743],[2.653,-2.799],[3.499,-1.562],[4.004,0],[3.516,1.562],[2.669,2.8],[1.497,3.744],[0,4.33]],"o":[[1.497,-3.711],[2.669,-2.783],[3.516,-1.546],[4.004,0],[3.499,1.546],[2.653,2.783],[1.497,3.711],[0,4.33],[-1.498,3.744],[-2.654,2.8],[-3.5,1.562],[-4.004,0],[-3.516,-1.562],[-2.67,-2.799],[-1.498,-3.743],[0,-4.362]],"v":[[12.354,-47.705],[18.604,-57.446],[27.881,-63.94],[39.16,-66.26],[50.415,-63.94],[59.644,-57.446],[65.869,-47.705],[68.115,-35.596],[65.869,-23.486],[59.644,-13.672],[50.415,-7.129],[39.16,-4.785],[27.881,-7.129],[18.604,-13.672],[12.354,-23.486],[10.107,-35.596]],"c":true},"ix":2},"nm":"©","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-1.791,-4.427],[-3.191,-3.336],[-4.183,-1.855],[-4.785,0],[-4.183,1.855],[-3.174,3.337],[-1.791,4.427],[0,5.176],[1.79,4.427],[3.174,3.304],[4.182,1.839],[4.785,0],[4.182,-1.839],[3.19,-3.304],[1.79,-4.427],[0,-5.176]],"o":[[1.79,4.427],[3.19,3.337],[4.182,1.855],[4.785,0],[4.182,-1.855],[3.174,-3.336],[1.79,-4.427],[0,-5.176],[-1.791,-4.427],[-3.174,-3.304],[-4.183,-1.839],[-4.785,0],[-4.183,1.839],[-3.191,3.304],[-1.791,4.427],[0,5.176]],"v":[[7.178,-21.191],[14.648,-9.546],[25.708,-1.758],[39.16,1.025],[52.612,-1.758],[63.647,-9.546],[71.094,-21.191],[73.779,-35.596],[71.094,-50],[63.647,-61.597],[52.612,-69.312],[39.16,-72.07],[25.708,-69.312],[14.648,-61.597],[7.178,-50],[4.492,-35.596]],"c":true},"ix":2},"nm":"©","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"©","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"2","size":19,"style":"Regular","w":56.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.611,2.051],[-1.221,2.116],[-0.7,2.132],[0,2.084],[1.709,2.849],[3.19,1.579],[4.492,0],[3.45,-1.969],[1.758,-3.32],[0,-4.004],[0,0],[-1.042,2.181],[-2.1,1.221],[-3.158,0],[-1.855,-1.139],[-0.961,-1.904],[0,-2.344],[0.635,-1.774],[1.579,-2.229],[2.864,-3.19],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[1.823,-1.985],[1.611,-2.051],[1.221,-2.116],[0.7,-2.132],[0,-3.809],[-1.709,-2.848],[-3.191,-1.579],[-5.046,0],[-3.451,1.97],[-1.758,3.32],[0,0],[0,-2.832],[1.041,-2.18],[2.1,-1.221],[2.637,0],[1.855,1.14],[0.96,1.904],[0,1.855],[-0.635,1.775],[-1.579,2.23],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[16.846,-7.422],[35.889,-28.076],[41.04,-34.131],[45.288,-40.381],[48.169,-46.753],[49.219,-53.076],[46.655,-63.062],[39.307,-69.702],[27.783,-72.07],[15.039,-69.116],[7.227,-61.182],[4.59,-50.195],[13.623,-50.195],[15.186,-57.715],[19.897,-62.817],[27.783,-64.648],[34.521,-62.939],[38.745,-58.374],[40.186,-52.002],[39.233,-46.558],[35.913,-40.552],[29.248,-32.422],[5.957,-6.494],[5.957,0],[52.49,0],[52.49,-7.422]],"c":true},"ix":2},"nm":"2","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"0","size":19,"style":"Regular","w":56.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.684,3.451],[1.286,2.393],[1.823,1.449],[2.327,0.668],[2.766,0],[2.75,-1.041],[1.953,-2.393],[1.057,-3.938],[0,-5.827],[0,0],[-0.684,-3.483],[-1.302,-2.441],[-1.839,-1.514],[-2.312,-0.684],[-2.734,0],[-2.751,1.09],[-1.953,2.441],[-1.042,4.004],[0,5.827],[0,0]],"o":[[-0.684,-3.45],[-1.286,-2.393],[-1.823,-1.448],[-2.328,-0.667],[-3.418,0],[-2.751,1.042],[-1.953,2.393],[-1.058,3.939],[0,0],[0,4.655],[0.684,3.484],[1.302,2.441],[1.839,1.514],[2.311,0.684],[3.45,0],[2.75,-1.09],[1.953,-2.441],[1.041,-4.004],[0,0],[0,-4.655]],"v":[[49.512,-53.369],[46.558,-62.134],[41.895,-67.896],[35.669,-71.069],[28.027,-72.07],[18.774,-70.508],[11.719,-65.356],[7.202,-55.859],[5.615,-41.211],[5.615,-30.371],[6.641,-18.164],[9.619,-9.277],[14.331,-3.345],[20.557,-0.049],[28.125,0.977],[37.427,-0.659],[44.482,-5.957],[48.975,-15.625],[50.537,-30.371],[50.537,-41.211]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.553,-2.848],[1.123,-1.807],[1.66,-0.846],[2.213,0],[1.416,0.537],[1.074,1.14],[0.748,1.775],[0.374,2.441],[0,3.191],[0,0],[-0.586,2.8],[-1.123,1.726],[-1.66,0.798],[-2.148,0],[-1.416,-0.504],[-1.091,-1.074],[-0.716,-1.725],[-0.375,-2.425],[0,-3.19],[0,0]],"o":[[-0.554,2.849],[-1.123,1.807],[-1.66,0.847],[-1.726,0],[-1.416,-0.537],[-1.074,-1.139],[-0.749,-1.774],[-0.375,-2.441],[0,0],[0,-4.004],[0.586,-2.799],[1.123,-1.725],[1.66,-0.797],[1.758,0],[1.416,0.505],[1.09,1.074],[0.716,1.726],[0.374,2.425],[0,0],[0,3.972]],"v":[[40.625,-18.677],[38.11,-11.694],[33.936,-7.715],[28.125,-6.445],[23.413,-7.251],[19.678,-9.766],[16.943,-14.136],[15.259,-20.459],[14.697,-28.906],[14.697,-42.725],[15.576,-52.93],[18.14,-59.717],[22.314,-63.501],[28.027,-64.697],[32.788,-63.94],[36.548,-61.572],[39.258,-57.373],[40.894,-51.147],[41.455,-42.725],[41.455,-28.906]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"1","size":19,"style":"Regular","w":56.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[34.18,-71.484],[8.35,-61.719],[8.35,-53.564],[26.562,-60.205],[26.562,0],[35.596,0],[35.596,-71.484]],"c":true},"ix":2},"nm":"1","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":" ","size":19,"style":"Regular","w":24.8,"data":{},"fFamily":"Roboto"},{"ch":"M","size":19,"style":"Regular","w":87.3,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[40.039,0],[47.168,0],[76.074,-71.094],[66.895,-71.094],[43.652,-13.135],[20.361,-71.094],[11.23,-71.094]],"c":true},"ix":2},"nm":"M","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,0],[17.627,0],[17.627,-27.734],[16.309,-71.094],[8.252,-71.094]],"c":true},"ix":2},"nm":"M","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[69.629,-27.734],[69.629,0],[79.004,0],[79.004,-71.094],[70.947,-71.094]],"c":true},"ix":2},"nm":"M","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"M","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"a","size":19,"style":"Regular","w":54.39,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.261,-1.741],[-0.456,-1.041],[0,0],[0,0],[0.309,1.986],[0,1.758],[0,0],[1.676,2.621],[2.946,1.302],[3.841,0],[2.588,-0.895],[1.839,-1.514],[0.977,-1.855],[0,-1.888],[0,0],[-0.961,1.27],[-1.709,0.781],[-2.279,0],[-1.66,-0.846],[-0.83,-1.546],[0,-2.083],[0,0]],"o":[[0.26,1.742],[0,0],[0,0],[-0.619,-1.432],[-0.31,-1.985],[0,0],[0,-3.938],[-1.677,-2.62],[-2.946,-1.302],[-3.191,0],[-2.588,0.896],[-1.839,1.514],[-0.977,1.855],[0,0],[0,-1.465],[0.96,-1.27],[1.709,-0.781],[2.441,0],[1.66,0.847],[0.83,1.546],[0,0],[0,1.498]],"v":[[38.428,-4.175],[39.502,0],[48.926,0],[48.926,-0.781],[47.534,-5.908],[47.07,-11.523],[47.07,-36.133],[44.556,-45.972],[37.622,-51.855],[27.441,-53.809],[18.774,-52.466],[12.134,-48.853],[7.91,-43.799],[6.445,-38.184],[15.479,-38.184],[16.919,-42.285],[20.923,-45.361],[26.904,-46.533],[33.057,-45.264],[36.792,-41.675],[38.037,-36.23],[38.037,-9.033]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[2.93,-0.748],[2.083,-1.448],[1.106,-2.164],[0,-2.832],[-1.482,-2.36],[-2.686,-1.399],[-3.581,0],[-2.295,0.993],[-1.677,1.514],[-1.009,1.66],[-0.228,1.367],[0,0],[1.253,-1.692],[2.116,-1.172],[2.766,0],[1.514,0.798],[0.748,1.367],[0,1.66],[-0.716,1.221],[-1.367,0.814],[-2.019,0.407],[-2.572,0],[0,0],[0,0]],"o":[[-3.613,0],[-2.93,0.749],[-2.084,1.449],[-1.107,2.165],[0,2.93],[1.481,2.361],[2.686,1.399],[2.864,0],[2.295,-0.993],[1.676,-1.514],[1.009,-1.66],[0,0],[-0.098,1.595],[-1.254,1.693],[-2.116,1.172],[-2.214,0],[-1.514,-0.797],[-0.749,-1.367],[0,-1.627],[0.716,-1.221],[1.367,-0.813],[2.018,-0.407],[0,0],[0,0],[0,0]],"v":[[29.102,-32.031],[19.287,-30.908],[11.768,-27.612],[6.982,-22.192],[5.322,-14.697],[7.544,-6.763],[13.794,-1.123],[23.193,0.977],[30.933,-0.513],[36.89,-4.272],[40.918,-9.033],[42.773,-13.574],[38.916,-17.92],[36.89,-12.988],[31.836,-8.691],[24.512,-6.934],[18.921,-8.13],[15.527,-11.377],[14.404,-15.918],[15.479,-20.19],[18.604,-23.242],[23.682,-25.073],[30.566,-25.684],[39.697,-25.684],[39.6,-32.031]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"a","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"z","size":19,"style":"Regular","w":49.61,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[7.812,-7.422],[7.812,0],[46.24,0],[46.24,-7.422]],"c":true},"ix":2},"nm":"z","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.824,-52.832],[39.062,-52.832],[4.346,-6.641],[4.346,0],[9.863,0],[44.824,-46.436]],"c":true},"ix":2},"nm":"z","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[4.736,-52.832],[4.736,-45.361],[40.82,-45.361],[40.82,-52.832]],"c":true},"ix":2},"nm":"z","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"z","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"r","size":19,"style":"Regular","w":33.89,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.674,-52.832],[6.885,-52.832],[6.885,0],[15.918,0],[15.918,-44.531]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.846,0.146],[0.651,0],[2.067,-1.221],[1.334,-2.164],[0.635,-2.799],[0,-3.19],[0,0],[-0.635,1.611],[-1.107,1.172],[-1.595,0.652],[-2.084,0],[-0.668,-0.049],[-0.749,-0.163],[0,0]],"o":[[-0.847,-0.146],[-2.865,0],[-2.068,1.221],[-1.335,2.165],[-0.635,2.8],[0,0],[0.195,-1.92],[0.635,-1.611],[1.106,-1.172],[1.595,-0.651],[0.846,0],[0.667,0.049],[0,0],[-0.326,-0.163]],"v":[[30.664,-53.589],[28.418,-53.809],[21.021,-51.978],[15.918,-46.899],[12.964,-39.453],[12.012,-30.469],[14.551,-31.934],[15.796,-37.231],[18.408,-41.406],[22.461,-44.141],[27.979,-45.117],[30.249,-45.044],[32.373,-44.727],[32.422,-53.125]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"r","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"T","size":19,"style":"Regular","w":60.45,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[25.244,-71.094],[25.244,0],[34.521,0],[34.521,-71.094]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.441,-71.094],[2.441,-63.379],[57.373,-63.379],[57.373,-71.094]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"T","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"e","size":19,"style":"Regular","w":53.03,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.556,0.977],[-1.758,1.562],[-1.14,1.726],[0,0],[2.213,-1.302],[3.19,0],[1.936,0.945],[1.35,1.66],[0.7,2.197],[0,2.507],[0,0],[-0.684,2.441],[-1.237,1.693],[-1.726,0.863],[-2.051,0],[-1.791,-1.432],[-0.83,-2.213],[-0.13,-2.344],[0,0],[0,0],[0,0],[0,0],[0,0],[0.846,3.142],[1.758,2.328],[2.75,1.302],[3.776,0],[2.766,-1.204],[2.18,-2.344],[1.27,-3.369],[0,-4.297],[0,0],[-1.14,-3.125],[-2.132,-2.278],[-2.979,-1.253],[-3.679,0]],"o":[[2.555,-0.977],[1.758,-1.562],[0,0],[-1.66,2.181],[-2.214,1.302],[-2.474,0],[-1.937,-0.944],[-1.351,-1.66],[-0.7,-2.197],[0,0],[0,-3.19],[0.684,-2.441],[1.237,-1.692],[1.725,-0.862],[3.092,0],[1.79,1.433],[0.83,2.214],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-3.711],[-0.847,-3.141],[-1.758,-2.327],[-2.751,-1.302],[-2.962,0],[-2.767,1.205],[-2.181,2.344],[-1.27,3.369],[0,0],[0,3.711],[1.139,3.125],[2.132,2.279],[2.979,1.253],[3.483,0]],"v":[[37.866,-0.488],[44.336,-4.297],[48.682,-9.229],[43.213,-13.574],[37.402,-8.35],[29.297,-6.396],[22.681,-7.812],[17.749,-11.719],[14.673,-17.505],[13.623,-24.561],[13.623,-26.611],[14.648,-35.059],[17.529,-41.26],[21.973,-45.093],[27.637,-46.387],[34.961,-44.238],[38.892,-38.77],[40.332,-31.934],[40.332,-31.25],[9.912,-31.25],[9.912,-23.877],[49.365,-23.877],[49.365,-27.93],[48.096,-38.208],[44.189,-46.411],[37.427,-51.855],[27.637,-53.809],[19.043,-52.002],[11.621,-46.68],[6.445,-38.11],[4.541,-26.611],[4.541,-24.561],[6.25,-14.307],[11.157,-6.201],[18.823,-0.903],[28.809,0.977]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"e","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"c","size":19,"style":"Regular","w":52.34,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.871,1.091],[1.09,1.823],[0.455,2.246],[0,2.312],[0,0],[-0.472,2.23],[-1.091,1.839],[-1.872,1.091],[-2.767,0],[-1.807,-1.057],[-1.058,-1.758],[-0.163,-2.18],[0,0],[1.774,2.881],[3.092,1.677],[4.134,0],[2.946,-1.399],[1.936,-2.441],[0.96,-3.174],[0,-3.548],[0,0],[-0.961,-3.174],[-1.937,-2.441],[-2.946,-1.399],[-3.972,0],[-3.125,1.643],[-1.937,2.686],[-0.163,3.125],[0,0],[1.172,-1.546],[1.823,-0.879],[2.148,0]],"o":[[-1.872,-1.09],[-1.091,-1.823],[-0.456,-2.246],[0,0],[0,-2.311],[0.471,-2.229],[1.09,-1.839],[1.871,-1.09],[2.409,0],[1.807,1.058],[1.057,1.758],[0,0],[-0.163,-3.645],[-1.775,-2.881],[-3.093,-1.676],[-3.972,0],[-2.946,1.4],[-1.937,2.441],[-0.961,3.174],[0,0],[0,3.548],[0.96,3.174],[1.936,2.441],[2.946,1.399],[3.743,0],[3.125,-1.643],[1.936,-2.686],[0,0],[-0.163,1.986],[-1.172,1.546],[-1.823,0.879],[-2.8,0]],"v":[[21.021,-8.081],[16.577,-12.451],[14.258,-18.555],[13.574,-25.391],[13.574,-27.441],[14.282,-34.253],[16.626,-40.356],[21.069,-44.751],[28.027,-46.387],[34.351,-44.8],[38.647,-40.576],[40.479,-34.668],[49.072,-34.668],[46.167,-44.458],[38.867,-51.294],[28.027,-53.809],[17.651,-51.709],[10.327,-45.947],[5.981,-37.524],[4.541,-27.441],[4.541,-25.391],[5.981,-15.308],[10.327,-6.885],[17.651,-1.123],[28.027,0.977],[38.33,-1.489],[45.923,-7.983],[49.072,-16.699],[40.479,-16.699],[38.477,-11.401],[33.984,-7.764],[28.027,-6.445]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"c","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"h","size":19,"style":"Regular","w":55.08,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[6.885,-75],[6.885,0],[15.918,0],[15.918,-75]],"c":true},"ix":2},"nm":"h","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.732,2.132],[-1.318,1.66],[-1.839,0.945],[-2.246,0],[-1.562,-0.764],[-0.814,-1.676],[0,-2.766],[0,0],[0,0],[0,0],[0.781,2.425],[1.481,1.53],[2.083,0.7],[2.604,0],[2.62,-1.253],[1.888,-2.278],[1.041,-3.076],[0.032,-3.613],[0,0]],"o":[[0.732,-2.132],[1.318,-1.66],[1.839,-0.944],[2.278,0],[1.562,0.765],[0.813,1.677],[0,0],[0,0],[0,0],[0,-3.483],[-0.781,-2.425],[-1.482,-1.53],[-2.084,-0.7],[-3.191,0],[-2.621,1.254],[-1.888,2.279],[-1.042,3.076],[0,0],[0,-2.376]],"v":[[14.868,-35.181],[17.944,-40.869],[22.681,-44.775],[28.809,-46.191],[34.57,-45.044],[38.135,-41.382],[39.355,-34.717],[39.355,0],[48.438,0],[48.438,-34.619],[47.266,-43.481],[43.872,-49.414],[38.525,-52.759],[31.494,-53.809],[22.778,-51.929],[16.016,-46.631],[11.621,-38.599],[10.01,-28.564],[13.77,-28.418]],"c":true},"ix":2},"nm":"h","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"h","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"n","size":19,"style":"Regular","w":55.22,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.43,-52.832],[6.885,-52.832],[6.885,0],[15.918,0],[15.918,-41.553]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.732,2.132],[-1.318,1.66],[-1.839,0.945],[-2.246,0],[-1.562,-0.764],[-0.814,-1.676],[0,-2.766],[0,0],[0,0],[0,0],[0.781,2.425],[1.481,1.53],[2.083,0.7],[2.604,0],[2.62,-1.253],[1.888,-2.278],[1.041,-3.076],[0.032,-3.613],[0,0]],"o":[[0.732,-2.132],[1.318,-1.66],[1.839,-0.944],[2.278,0],[1.562,0.765],[0.813,1.677],[0,0],[0,0],[0,0],[0,-3.483],[-0.781,-2.425],[-1.482,-1.53],[-2.084,-0.7],[-3.191,0],[-2.621,1.254],[-1.888,2.279],[-1.042,3.076],[0,0],[0,-2.376]],"v":[[14.868,-35.181],[17.944,-40.869],[22.681,-44.775],[28.809,-46.191],[34.57,-45.044],[38.135,-41.382],[39.355,-34.717],[39.355,0],[48.438,0],[48.438,-34.619],[47.266,-43.481],[43.872,-49.414],[38.525,-52.759],[31.494,-53.809],[22.778,-51.929],[16.016,-46.631],[11.621,-38.599],[10.01,-28.564],[13.77,-28.418]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"n","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"o","size":19,"style":"Regular","w":57.03,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.107,-3.255],[-2.1,-2.425],[-2.962,-1.35],[-3.711,0],[-2.946,1.35],[-2.1,2.425],[-1.107,3.255],[0,3.809],[0,0],[1.106,3.271],[2.1,2.425],[2.979,1.351],[3.711,0],[2.962,-1.35],[2.083,-2.425],[1.106,-3.271],[0,-3.809],[0,0]],"o":[[1.106,3.255],[2.1,2.425],[2.962,1.35],[3.711,0],[2.946,-1.35],[2.1,-2.425],[1.106,-3.255],[0,0],[0,-3.809],[-1.107,-3.271],[-2.1,-2.425],[-2.979,-1.35],[-3.679,0],[-2.962,1.351],[-2.084,2.425],[-1.107,3.271],[0,0],[0,3.809]],"v":[[6.152,-15.234],[10.962,-6.714],[18.555,-1.05],[28.564,0.977],[38.55,-1.05],[46.118,-6.714],[50.928,-15.234],[52.588,-25.83],[52.588,-26.953],[50.928,-37.573],[46.118,-46.118],[38.501,-51.782],[28.467,-53.809],[18.506,-51.782],[10.938,-46.118],[6.152,-37.573],[4.492,-26.953],[4.492,-25.83]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.619,2.328],[-1.254,1.807],[-1.872,1.042],[-2.474,0],[-1.872,-1.041],[-1.254,-1.807],[-0.635,-2.327],[0,-2.604],[0,0],[0.635,-2.327],[1.237,-1.79],[1.871,-1.025],[2.473,0],[1.888,1.025],[1.253,1.791],[0.618,2.328],[0,2.637],[0,0]],"o":[[0.618,-2.327],[1.253,-1.807],[1.871,-1.041],[2.506,0],[1.871,1.042],[1.253,1.807],[0.635,2.328],[0,0],[0,2.637],[-0.635,2.328],[-1.237,1.791],[-1.872,1.025],[-2.507,0],[-1.888,-1.025],[-1.254,-1.79],[-0.619,-2.327],[0,0],[0,-2.604]],"v":[[14.453,-34.351],[17.261,-40.552],[21.948,-44.824],[28.467,-46.387],[35.034,-44.824],[39.722,-40.552],[42.554,-34.351],[43.506,-26.953],[43.506,-25.83],[42.554,-18.384],[39.746,-12.207],[35.083,-7.983],[28.564,-6.445],[21.973,-7.983],[17.261,-12.207],[14.453,-18.384],[13.525,-25.83],[13.525,-26.953]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"o","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"l","size":19,"style":"Regular","w":24.32,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[7.617,-75],[7.617,0],[16.699,0],[16.699,-75]],"c":true},"ix":2},"nm":"l","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"l","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"g","size":19,"style":"Regular","w":56.15,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.155,-2.1],[2.083,-1.074],[2.864,0],[2.425,1.041],[2.213,2.669],[0,0],[-2.361,-1.351],[-2.458,-0.57],[-1.823,0],[-3.369,1.709],[-1.888,3.288],[0,4.655],[0,0],[0,0]],"o":[[0,0],[0,3.059],[-1.156,2.1],[-2.084,1.074],[-2.377,0],[-2.425,-1.042],[0,0],[1.595,2.278],[2.36,1.35],[2.457,0.569],[4.395,0],[3.369,-1.709],[1.888,-3.288],[0,0],[0,0],[0,0]],"v":[[40.283,-41.211],[40.283,-0.684],[38.55,7.056],[33.691,11.816],[26.27,13.428],[19.067,11.865],[12.109,6.299],[7.373,11.67],[13.306,17.114],[20.532,19.995],[26.953,20.85],[38.599,18.286],[46.484,10.791],[49.316,-1.123],[49.316,-52.832],[41.113,-52.832]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.961,-3.271],[-1.823,-2.409],[-2.556,-1.334],[-3.158,0],[-2.507,1.155],[-1.742,2.181],[-1.025,3.093],[-0.359,3.874],[0,0],[1.009,3.093],[1.741,2.197],[2.49,1.156],[3.32,0],[2.571,-1.286],[1.807,-2.376],[0.96,-3.304],[0,-4.036],[0,0]],"o":[[0.96,3.271],[1.823,2.409],[2.555,1.334],[3.352,0],[2.506,-1.155],[1.741,-2.18],[1.025,-3.092],[0,0],[-0.391,-3.906],[-1.009,-3.092],[-1.742,-2.197],[-2.49,-1.155],[-3.223,0],[-2.572,1.286],[-1.807,2.377],[-0.961,3.304],[0,0],[0,3.841]],"v":[[6.177,-15.161],[10.352,-6.641],[16.919,-1.025],[25.488,0.977],[34.277,-0.757],[40.649,-5.762],[44.8,-13.672],[46.875,-24.121],[46.875,-28.613],[44.775,-39.111],[40.649,-47.046],[34.302,-52.075],[25.586,-53.809],[16.895,-51.88],[10.327,-46.387],[6.177,-37.866],[4.736,-26.855],[4.736,-25.83]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.537,2.328],[-1.123,1.775],[-1.775,1.025],[-2.474,0],[-1.693,-0.781],[-1.156,-1.318],[-0.732,-1.676],[-0.359,-1.79],[0,0],[1.155,-2.083],[1.953,-1.27],[2.995,0],[1.758,0.993],[1.123,1.758],[0.537,2.312],[0,2.637],[0,0]],"o":[[0.537,-2.327],[1.123,-1.774],[1.774,-1.025],[2.278,0],[1.692,0.781],[1.155,1.318],[0.732,1.677],[0,0],[-0.652,2.441],[-1.156,2.084],[-1.953,1.27],[-2.441,0],[-1.758,-0.993],[-1.123,-1.758],[-0.537,-2.311],[0,0],[0,-2.637]],"v":[[14.575,-34.302],[17.065,-40.454],[21.411,-44.653],[27.783,-46.191],[33.74,-45.02],[38.013,-41.87],[40.845,-37.378],[42.48,-32.178],[42.48,-20.41],[39.771,-13.623],[35.107,-8.594],[27.686,-6.689],[21.387,-8.179],[17.065,-12.305],[14.575,-18.408],[13.77,-25.83],[13.77,-26.855]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"g","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"i","size":19,"style":"Regular","w":24.32,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[7.617,-52.832],[7.617,0],[16.699,0],[16.699,-52.832]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.896,-0.993],[-1.758,0],[-0.928,0.993],[0,1.4],[0.928,1.009],[1.725,0],[0.895,-1.009],[0,-1.465]],"o":[[0.895,0.993],[1.725,0],[0.928,-0.993],[0,-1.465],[-0.928,-1.009],[-1.758,0],[-0.896,1.009],[0,1.4]],"v":[[8.276,-63.257],[12.256,-61.768],[16.235,-63.257],[17.627,-66.846],[16.235,-70.557],[12.256,-72.07],[8.276,-70.557],[6.934,-66.846]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"i","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"s","size":19,"style":"Regular","w":51.61,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.879,-1.139],[1.676,-0.651],[2.473,0],[1.888,0.603],[1.302,1.449],[0.13,2.474],[0,0],[-1.66,-2.637],[-3.223,-1.66],[-4.655,0],[-2.49,0.764],[-1.807,1.384],[-0.961,1.921],[0,2.312],[1.367,1.986],[2.799,1.367],[4.329,0.977],[1.595,0.554],[0.879,0.635],[0.342,0.765],[0,0.977],[-0.7,1.172],[-1.546,0.765],[-2.507,0],[-1.644,-0.911],[-0.863,-1.383],[0,-1.465],[0,0],[1.595,2.49],[2.995,1.498],[4.231,0],[2.409,-0.813],[1.709,-1.432],[0.928,-1.855],[0,-2.083],[-0.879,-1.627],[-1.644,-1.204],[-2.361,-0.846],[-2.93,-0.618],[-1.742,-0.928],[-0.57,-1.123],[0,-1.302]],"o":[[-0.879,1.14],[-1.677,0.652],[-1.855,0],[-1.888,-0.602],[-1.302,-1.448],[0,0],[0,2.93],[1.66,2.637],[3.223,1.66],[3.092,0],[2.49,-0.764],[1.807,-1.383],[0.96,-1.92],[0,-2.832],[-1.367,-1.985],[-2.8,-1.367],[-2.474,-0.553],[-1.595,-0.553],[-0.879,-0.635],[-0.342,-0.764],[0,-1.302],[0.7,-1.172],[1.546,-0.764],[2.376,0],[1.643,0.912],[0.862,1.384],[0,0],[0,-3.027],[-1.595,-2.49],[-2.995,-1.497],[-2.962,0],[-2.409,0.814],[-1.709,1.433],[-0.928,1.855],[0,2.181],[0.879,1.628],[1.643,1.205],[2.36,0.847],[3.483,0.684],[1.741,0.928],[0.569,1.123],[0,1.465]],"v":[[36.328,-10.107],[32.495,-7.422],[26.27,-6.445],[20.654,-7.349],[15.869,-10.425],[13.721,-16.309],[4.639,-16.309],[7.129,-7.959],[14.453,-1.514],[26.27,0.977],[34.644,-0.171],[41.089,-3.394],[45.239,-8.35],[46.68,-14.697],[44.629,-21.924],[38.379,-26.953],[27.686,-30.469],[21.582,-32.129],[17.871,-33.911],[16.04,-36.011],[15.527,-38.623],[16.577,-42.334],[19.946,-45.239],[26.025,-46.387],[32.056,-45.02],[35.815,-41.577],[37.109,-37.305],[46.143,-37.305],[43.75,-45.581],[36.865,-51.562],[26.025,-53.809],[17.969,-52.588],[11.792,-49.219],[7.837,-44.287],[6.445,-38.379],[7.764,-32.666],[11.548,-28.418],[17.554,-25.342],[25.488,-23.145],[33.325,-20.728],[36.792,-17.651],[37.646,-14.014]],"c":true},"ix":2},"nm":"s","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"s","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":",","size":19,"style":"Regular","w":19.68,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.374,-1.579],[0.716,-1.482],[1.041,-1.433],[0,0],[-1.498,3.304],[0,2.962],[0,0]],"o":[[0,0],[0,1.758],[-0.375,1.579],[-0.716,1.481],[0,0],[2.702,-2.214],[1.497,-3.304],[0,0],[0,0]],"v":[[6.25,-10.742],[6.25,-3.32],[5.688,1.685],[4.053,6.274],[1.416,10.645],[6.543,14.209],[12.842,5.933],[15.088,-3.467],[15.088,-10.742]],"c":true},"ix":2},"nm":",","mn":"ADBE Vector Shape - Group","hd":false}],"nm":",","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"U","size":19,"style":"Regular","w":64.84,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.367,-2.409],[2.457,-1.172],[3.288,0],[2.457,1.172],[1.367,2.409],[0,3.711],[0,0],[0,0],[0,0],[-2.263,-3.548],[-3.89,-1.774],[-4.818,0],[-3.923,1.774],[-2.377,3.548],[0,5.339],[0,0],[0,0]],"o":[[0,3.711],[-1.367,2.409],[-2.458,1.172],[-3.255,0],[-2.458,-1.172],[-1.367,-2.409],[0,0],[0,0],[0,0],[0,5.339],[2.262,3.548],[3.889,1.774],[4.59,0],[3.922,-1.774],[2.376,-3.548],[0,0],[0,0],[0,0]],"v":[[48.926,-22.998],[46.875,-13.818],[41.138,-8.447],[32.52,-6.689],[23.95,-8.447],[18.213,-13.818],[16.162,-22.998],[16.162,-71.094],[6.836,-71.094],[6.836,-22.998],[10.229,-9.668],[19.458,-1.685],[32.52,0.977],[45.288,-1.685],[54.736,-9.668],[58.301,-22.998],[58.301,-71.094],[48.926,-71.094]],"c":true},"ix":2},"nm":"U","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"U","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":".","size":19,"style":"Regular","w":26.37,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.961,-1.041],[-1.823,0],[-0.961,1.041],[0,1.498],[0.96,1.058],[1.823,0],[0.96,-1.057],[0,-1.53]],"o":[[0.96,1.041],[1.823,0],[0.96,-1.041],[0,-1.53],[-0.961,-1.057],[-1.823,0],[-0.961,1.058],[0,1.498]],"v":[[8.472,-0.977],[12.646,0.586],[16.821,-0.977],[18.262,-4.785],[16.821,-8.667],[12.646,-10.254],[8.472,-8.667],[7.031,-4.785]],"c":true},"ix":2},"nm":".","mn":"ADBE Vector Shape - Group","hd":false}],"nm":".","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"S","size":19,"style":"Regular","w":59.38,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.188,-1.692],[2.278,-0.911],[3.288,0],[2.1,0.537],[1.643,1.14],[0.944,1.742],[0,2.441],[0,0],[-1.546,-2.686],[-2.588,-1.823],[-3.174,-0.911],[-3.288,0],[-3.044,0.895],[-2.181,1.66],[-1.172,2.344],[0,2.898],[0.928,2.197],[1.904,1.742],[2.93,1.4],[4.036,1.14],[2.1,0.879],[1.35,1.042],[0.635,1.221],[0,1.498],[-1.058,1.726],[-2.181,1.009],[-3.353,0],[-2.312,-1.188],[-1.14,-2.067],[0,-2.669],[0,0],[1.953,3.271],[3.727,2.035],[5.338,0],[2.962,-0.977],[2.132,-1.741],[1.139,-2.344],[0,-2.766],[-1.074,-2.148],[-2.019,-1.66],[-2.832,-1.286],[-3.516,-1.041],[-2.197,-0.944],[-1.254,-1.041],[-0.505,-1.286],[0,-1.66]],"o":[[-1.189,1.693],[-2.279,0.912],[-2.279,0],[-2.1,-0.537],[-1.644,-1.139],[-0.945,-1.741],[0,0],[0,3.548],[1.546,2.686],[2.588,1.823],[3.174,0.911],[3.743,0],[3.043,-0.895],[2.18,-1.66],[1.172,-2.344],[0,-2.766],[-0.928,-2.197],[-1.904,-1.741],[-2.93,-1.399],[-2.93,-0.813],[-2.1,-0.879],[-1.351,-1.041],[-0.635,-1.221],[0,-2.213],[1.057,-1.725],[2.18,-1.009],[3.548,0],[2.311,1.189],[1.139,2.068],[0,0],[0,-3.711],[-1.953,-3.271],[-3.728,-2.034],[-3.646,0],[-2.962,0.977],[-2.132,1.742],[-1.14,2.344],[0,2.767],[1.074,2.148],[2.018,1.66],[2.832,1.286],[3.352,0.977],[2.197,0.945],[1.253,1.042],[0.504,1.286],[0,2.312]],"v":[[44.36,-11.963],[39.16,-8.057],[30.811,-6.689],[24.243,-7.495],[18.628,-10.01],[14.746,-14.331],[13.33,-20.605],[3.955,-20.605],[6.274,-11.255],[12.476,-4.492],[21.118,-0.391],[30.811,0.977],[40.991,-0.366],[48.828,-4.199],[53.857,-10.205],[55.615,-18.066],[54.224,-25.513],[49.976,-31.421],[42.725,-36.133],[32.275,-39.941],[24.731,-42.48],[19.556,-45.361],[16.577,-48.755],[15.625,-52.832],[17.212,-58.74],[22.07,-62.842],[30.371,-64.355],[39.16,-62.573],[44.336,-57.69],[46.045,-50.586],[55.42,-50.586],[52.49,-61.06],[43.97,-69.019],[30.371,-72.07],[20.459,-70.605],[12.817,-66.528],[7.91,-60.4],[6.201,-52.734],[7.812,-45.361],[12.451,-39.648],[19.727,-35.229],[29.248,-31.738],[37.573,-28.857],[42.749,-25.879],[45.386,-22.388],[46.143,-17.969]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"G","size":19,"style":"Regular","w":68.12,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[1.172,-0.797],[2.083,-0.569],[3.352,0],[2.49,1.172],[1.79,2.263],[0.96,3.223],[0,4.102],[0,0],[-0.765,3.191],[-1.562,2.246],[-2.409,1.205],[-3.288,0],[-2.312,-1.286],[-1.254,-2.116],[-0.423,-2.571],[0,0],[2.067,3.288],[3.662,1.872],[5.436,0],[3.548,-1.514],[2.441,-2.913],[1.253,-4.166],[0,-5.305],[0,0],[-1.449,-4.182],[-2.654,-2.913],[-3.63,-1.514],[-4.33,0],[-3.369,1.188],[-1.921,1.611],[-0.879,1.302],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.619,0.716],[-1.172,0.798],[-2.084,0.57],[-3.027,0],[-2.49,-1.172],[-1.791,-2.262],[-0.961,-3.223],[0,0],[0,-4.004],[0.764,-3.19],[1.562,-2.246],[2.409,-1.204],[3.645,0],[2.311,1.286],[1.253,2.116],[0,0],[-0.586,-4.199],[-2.068,-3.288],[-3.662,-1.871],[-4.59,0],[-3.548,1.514],[-2.441,2.914],[-1.254,4.167],[0,0],[0,5.306],[1.448,4.183],[2.653,2.914],[3.629,1.514],[5.305,0],[3.369,-1.188],[1.92,-1.611],[0,0],[0,0]],"v":[[34.961,-35.4],[34.961,-27.783],[51.416,-27.783],[51.416,-11.865],[48.73,-9.595],[43.848,-7.544],[35.693,-6.689],[27.417,-8.447],[20.996,-13.599],[16.87,-21.826],[15.43,-32.812],[15.43,-38.428],[16.577,-49.219],[20.068,-57.373],[26.025,-62.549],[34.57,-64.355],[43.506,-62.427],[48.853,-57.324],[51.367,-50.293],[60.791,-50.293],[56.812,-61.523],[48.218,-69.263],[34.57,-72.07],[22.363,-69.8],[13.379,-63.159],[7.837,-52.539],[5.957,-38.33],[5.957,-32.812],[8.13,-18.579],[14.282,-7.935],[23.706,-1.294],[35.645,0.977],[48.657,-0.806],[56.592,-5.005],[60.791,-9.375],[60.791,-35.4]],"c":true},"ix":2},"nm":"G","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"G","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"u","size":19,"style":"Regular","w":55.13,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[39.648,0],[48.291,0],[48.291,-52.832],[39.209,-52.832],[39.209,-12.207]],"c":true},"ix":2},"nm":"u","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.993,-2.522],[2.246,-1.481],[3.841,0],[1.155,0.359],[0.928,0.896],[0.537,1.546],[0,2.377],[0,0],[0,0],[0,0],[-0.83,-2.506],[-1.53,-1.562],[-2.132,-0.748],[-2.572,0],[-2.637,1.221],[-1.628,2.181],[-0.732,2.979],[0,3.516],[0,0]],"o":[[-0.993,2.523],[-2.246,1.482],[-1.237,0],[-1.156,-0.358],[-0.928,-0.895],[-0.537,-1.546],[0,0],[0,0],[0,0],[0,3.516],[0.83,2.507],[1.53,1.562],[2.132,0.748],[3.776,0],[2.637,-1.221],[1.627,-2.18],[0.732,-2.979],[0,0],[0,3.093]],"v":[[39.429,-14.917],[34.57,-8.911],[25.439,-6.689],[21.851,-7.227],[18.726,-9.106],[16.528,-12.769],[15.723,-18.652],[15.723,-52.832],[6.689,-52.832],[6.689,-18.75],[7.935,-9.717],[11.475,-3.613],[16.968,-0.146],[24.023,0.977],[33.643,-0.854],[40.039,-5.957],[43.579,-13.696],[44.678,-23.438],[40.918,-23.34]],"c":true},"ix":2},"nm":"u","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"u","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"v","size":19,"style":"Regular","w":48.44,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[21.582,0],[27.637,0],[46.631,-52.832],[37.402,-52.832],[22.949,-8.154]],"c":true},"ix":2},"nm":"v","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.611,-52.832],[20.752,0],[26.807,0],[25.781,-7.91],[10.889,-52.832]],"c":true},"ix":2},"nm":"v","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"v","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"y","size":19,"style":"Regular","w":47.31,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.993,-1.254],[1.432,-0.537],[2.051,0],[0.569,0.049],[0.26,0.032],[0,0],[-1.107,-0.195],[-0.716,0],[-1.742,0.862],[-1.237,1.367],[-0.798,1.514],[-0.488,1.302],[0,0],[0,0],[0,0]],"o":[[-0.716,2.18],[-0.993,1.253],[-1.433,0.537],[-0.228,0],[-0.57,-0.049],[0,0],[0.455,0.13],[1.106,0.195],[2.409,0],[1.741,-0.863],[1.237,-1.367],[0.797,-1.514],[0,0],[0,0],[0,0],[0,0]],"v":[[17.969,4.785],[15.405,9.937],[11.768,12.622],[6.543,13.428],[5.347,13.354],[4.102,13.232],[4.15,20.557],[6.494,21.045],[9.229,21.338],[15.454,20.044],[19.922,16.699],[22.974,12.378],[24.902,8.154],[46.094,-52.832],[36.426,-52.832],[21.729,-5.469]],"c":true},"ix":2},"nm":"y","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.074,-52.832],[20.508,1.025],[27.002,-2.295],[24.658,-11.816],[10.938,-52.832]],"c":true},"ix":2},"nm":"y","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"y","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"D","size":19,"style":"Regular","w":65.62,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.955,1.546],[-2.816,2.898],[-1.498,4.118],[0,5.144],[0,0],[1.497,4.118],[2.783,2.914],[3.841,1.546],[4.655,0],[0,0],[0,0],[0,0],[-2.718,-1.139],[-1.888,-2.197],[-0.977,-3.174],[0,-4.069],[0,0],[1.709,-3.857],[3.385,-2.132],[5.078,0],[0,0],[0,0],[0,0]],"o":[[3.955,-1.546],[2.815,-2.897],[1.497,-4.118],[0,0],[0,-5.143],[-1.498,-4.118],[-2.783,-2.913],[-3.841,-1.546],[0,0],[0,0],[0,0],[3.516,0],[2.718,1.14],[1.888,2.197],[0.977,3.174],[0,0],[0,5.176],[-1.709,3.857],[-3.386,2.132],[0,0],[0,0],[0,0],[4.948,0]],"v":[[40.845,-2.319],[51.001,-8.984],[57.471,-19.507],[59.717,-33.398],[59.717,-37.646],[57.471,-51.538],[51.05,-62.085],[41.113,-68.774],[28.369,-71.094],[12.354,-71.094],[12.354,-63.379],[28.369,-63.379],[37.72,-61.67],[44.629,-56.665],[48.926,-48.608],[50.391,-37.744],[50.391,-33.398],[47.827,-19.849],[40.186,-10.864],[27.49,-7.666],[12.744,-7.666],[12.646,0],[27.49,0]],"c":true},"ix":2},"nm":"D","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-71.094]],"c":true},"ix":2},"nm":"D","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"D","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"A","size":19,"style":"Regular","w":65.23,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[34.717,-71.094],[28.516,-71.094],[1.416,0],[11.035,0],[34.57,-64.795]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.965,0],[36.768,-71.094],[30.566,-71.094],[30.713,-64.795],[54.297,0]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[13.135,-26.318],[13.135,-18.604],[53.076,-18.604],[53.076,-26.318]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"A","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"F","size":19,"style":"Regular","w":55.27,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-71.094]],"c":true},"ix":2},"nm":"F","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.625,-39.111],[15.625,-31.396],[47.461,-31.396],[47.461,-39.111]],"c":true},"ix":2},"nm":"F","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.625,-71.094],[15.625,-63.379],[52.295,-63.379],[52.295,-71.094]],"c":true},"ix":2},"nm":"F","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"F","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"m","size":19,"style":"Regular","w":87.7,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,-52.832],[6.787,-52.832],[6.787,0],[15.869,0],[15.869,-42.334]],"c":true},"ix":2},"nm":"m","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.472,2.132],[-1.074,1.66],[-1.791,0.945],[-2.67,0],[-1.693,-0.764],[-0.928,-1.66],[0,-2.766],[0,0],[0,0],[0,0],[0.846,2.344],[1.53,1.498],[2.083,0.7],[2.473,0],[2.669,-1.253],[1.79,-2.278],[0.911,-3.076],[0.032,-3.613],[0,0]],"o":[[0.471,-2.132],[1.074,-1.66],[1.79,-0.944],[2.278,0],[1.692,0.765],[0.928,1.66],[0,0],[0,0],[0,0],[0,-3.32],[-0.847,-2.344],[-1.53,-1.497],[-2.084,-0.7],[-3.516,0],[-2.67,1.254],[-1.791,2.279],[-0.912,3.076],[0,0],[0,-2.376]],"v":[[14.722,-35.181],[17.041,-40.869],[21.338,-44.775],[28.027,-46.191],[33.984,-45.044],[37.915,-41.406],[39.307,-34.766],[39.307,0],[48.34,0],[48.34,-35.205],[47.07,-43.701],[43.506,-49.463],[38.086,-52.759],[31.25,-53.809],[21.973,-51.929],[15.283,-46.631],[11.23,-38.599],[9.814,-28.564],[14.014,-28.418]],"c":true},"ix":2},"nm":"m","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.537,1.53],[-1.042,1.189],[-1.53,0.684],[-1.986,0],[-1.677,-0.667],[-0.928,-1.643],[0,-2.962],[0,0],[0,0],[0,0],[0.781,2.409],[1.514,1.546],[2.197,0.749],[2.832,0],[2.604,-1.221],[1.774,-2.083],[0.928,-2.669],[0.032,-2.897],[0,0]],"o":[[0.537,-1.53],[1.041,-1.188],[1.53,-0.684],[2.311,0],[1.676,0.668],[0.928,1.644],[0,0],[0,0],[0,0],[0,-3.32],[-0.781,-2.409],[-1.514,-1.546],[-2.197,-0.748],[-3.353,0],[-2.605,1.221],[-1.775,2.084],[-0.928,2.67],[0,0],[0,-1.725]],"v":[[49.048,-38.281],[51.416,-42.358],[55.273,-45.166],[60.547,-46.191],[66.528,-45.19],[70.435,-41.724],[71.826,-34.814],[71.826,0],[80.908,0],[80.908,-34.717],[79.736,-43.311],[76.294,-49.243],[70.728,-52.686],[63.184,-53.809],[54.248,-51.978],[47.681,-47.021],[43.628,-39.893],[42.188,-31.543],[48.242,-33.398]],"c":true},"ix":2},"nm":"m","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"m","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"C","size":19,"style":"Regular","w":65.09,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.221,-2.376],[2.376,-1.27],[4.004,0],[2.311,1.318],[1.497,2.312],[0.732,3.06],[0,3.484],[0,0],[-0.814,3.093],[-1.611,2.214],[-2.393,1.205],[-3.158,0],[-2.279,-1.302],[-1.237,-2.393],[-0.456,-3.32],[0,0],[2.067,3.564],[3.711,2.019],[5.371,0],[3.516,-1.562],[2.49,-2.897],[1.318,-4.053],[0,-4.98],[0,0],[-1.318,-4.053],[-2.441,-2.881],[-3.402,-1.562],[-4.167,0],[-3.809,2.068],[-2.084,3.548],[-0.488,4.492],[0,0]],"o":[[-1.221,2.377],[-2.377,1.27],[-3.158,0],[-2.312,-1.318],[-1.498,-2.311],[-0.732,-3.059],[0,0],[0,-3.776],[0.813,-3.092],[1.611,-2.213],[2.393,-1.204],[3.678,0],[2.278,1.302],[1.237,2.393],[0,0],[-0.488,-4.688],[-2.068,-3.564],[-3.711,-2.018],[-4.395,0],[-3.516,1.562],[-2.49,2.898],[-1.318,4.053],[0,0],[0,4.98],[1.318,4.053],[2.441,2.881],[3.401,1.562],[5.696,0],[3.809,-2.067],[2.083,-3.548],[0,0],[-0.521,3.32]],"v":[[48.56,-14.062],[43.164,-8.594],[33.594,-6.689],[25.391,-8.667],[19.678,-14.111],[16.333,-22.168],[15.234,-31.982],[15.234,-39.16],[16.455,-49.463],[20.093,-57.422],[26.099,-62.549],[34.424,-64.355],[43.359,-62.402],[48.633,-56.86],[51.172,-48.291],[60.547,-48.291],[56.714,-60.669],[48.047,-69.043],[34.424,-72.07],[22.559,-69.727],[13.55,-63.037],[7.837,-52.612],[5.859,-39.062],[5.859,-31.982],[7.837,-18.433],[13.477,-8.032],[22.241,-1.367],[33.594,0.977],[47.852,-2.124],[56.689,-10.547],[60.547,-22.607],[51.172,-22.607]],"c":true},"ix":2},"nm":"C","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"C","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"N","size":19,"style":"Regular","w":71.34,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[53.613,-71.094],[53.613,-16.113],[17.676,-71.094],[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-54.834],[53.467,0],[62.939,0],[62.939,-71.094]],"c":true},"ix":2},"nm":"N","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"N","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"E","size":19,"style":"Regular","w":56.84,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.771,-7.666],[15.771,0],[53.418,0],[53.418,-7.666]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-71.094]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.771,-40.527],[15.771,-32.861],[48.438,-32.861],[48.438,-40.527]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.771,-71.094],[15.771,-63.379],[52.93,-63.379],[52.93,-71.094]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"E","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"/","size":19,"style":"Regular","w":30.32,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[30.615,-71.094],[0.928,6.104],[8.691,6.104],[38.33,-71.094]],"c":true},"ix":2},"nm":"/","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"/","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"b","size":19,"style":"Regular","w":56.15,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[6.836,0],[15.137,0],[15.918,-10.254],[15.918,-75],[6.836,-75]],"c":true},"ix":2},"nm":"b","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.911,3.304],[1.741,2.377],[2.571,1.286],[3.32,0],[2.506,-1.155],[1.725,-2.197],[1.025,-3.092],[0.391,-3.906],[0,0],[-1.025,-3.092],[-1.726,-2.18],[-2.523,-1.155],[-3.353,0],[-2.539,1.334],[-1.758,2.409],[-0.912,3.271],[0,3.841],[0,0]],"o":[[-0.912,-3.304],[-1.742,-2.376],[-2.572,-1.286],[-3.32,0],[-2.507,1.156],[-1.726,2.197],[-1.025,3.093],[0,0],[0.391,3.874],[1.025,3.093],[1.725,2.181],[2.522,1.155],[3.288,0],[2.539,-1.334],[1.758,-2.409],[0.911,-3.271],[0,0],[0,-4.036]],"v":[[50.244,-37.866],[46.265,-46.387],[39.795,-51.88],[30.957,-53.809],[22.217,-52.075],[15.869,-47.046],[11.743,-39.111],[9.619,-28.613],[9.619,-24.121],[11.743,-13.672],[15.869,-5.762],[22.241,-0.757],[31.055,0.977],[39.795,-1.025],[46.24,-6.641],[50.244,-15.161],[51.611,-25.83],[51.611,-26.855]],"c":true},"ix":2},"nm":"b","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.52,-2.311],[1.09,-1.758],[1.741,-0.993],[2.441,0],[2.002,1.335],[1.188,2.1],[0.52,2.279],[0,0],[-0.732,1.677],[-1.172,1.318],[-1.677,0.781],[-2.279,0],[-1.758,-1.025],[-1.074,-1.774],[-0.488,-2.327],[0,-2.637],[0,0]],"o":[[-0.521,2.312],[-1.091,1.758],[-1.742,0.993],[-2.962,0],[-2.002,-1.334],[-1.189,-2.1],[0,0],[0.358,-1.79],[0.732,-1.676],[1.172,-1.318],[1.676,-0.781],[2.571,0],[1.758,1.025],[1.074,1.775],[0.488,2.328],[0,0],[0,2.637]],"v":[[41.748,-18.408],[39.331,-12.305],[35.083,-8.179],[28.809,-6.689],[21.362,-8.691],[16.577,-13.843],[14.014,-20.41],[14.014,-32.178],[15.649,-37.378],[18.506,-41.87],[22.778,-45.02],[28.711,-46.191],[35.205,-44.653],[39.453,-40.454],[41.797,-34.302],[42.529,-26.855],[42.529,-25.83]],"c":true},"ix":2},"nm":"b","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"b","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"L","size":19,"style":"Regular","w":53.86,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.82,-7.666],[15.82,0],[51.367,0],[51.367,-7.666]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-71.094]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"L","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"d","size":19,"style":"Regular","w":56.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[40.967,0],[49.268,0],[49.268,-75],[40.186,-75],[40.186,-10.254]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.993,-3.271],[-1.839,-2.409],[-2.556,-1.334],[-3.093,0],[-2.507,1.155],[-1.742,2.181],[-1.025,3.093],[-0.359,3.874],[0,0],[1.009,3.093],[1.741,2.197],[2.49,1.156],[3.32,0],[2.555,-1.286],[1.839,-2.376],[0.993,-3.304],[0,-4.036],[0,0]],"o":[[0.993,3.271],[1.839,2.409],[2.555,1.334],[3.352,0],[2.506,-1.155],[1.741,-2.18],[1.025,-3.092],[0,0],[-0.391,-3.906],[-1.009,-3.092],[-1.742,-2.197],[-2.49,-1.155],[-3.158,0],[-2.556,1.286],[-1.839,2.377],[-0.993,3.304],[0,0],[0,3.841]],"v":[[6.128,-15.161],[10.376,-6.641],[16.968,-1.025],[25.439,0.977],[34.229,-0.757],[40.601,-5.762],[44.751,-13.672],[46.826,-24.121],[46.826,-28.613],[44.727,-39.111],[40.601,-47.046],[34.253,-52.075],[25.537,-53.809],[16.968,-51.88],[10.376,-46.387],[6.128,-37.866],[4.639,-26.855],[4.639,-25.83]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.537,2.328],[-1.14,1.775],[-1.775,1.025],[-2.474,0],[-1.677,-0.781],[-1.156,-1.318],[-0.732,-1.676],[-0.391,-1.79],[0,0],[1.172,-2.083],[1.936,-1.27],[2.995,0],[1.758,0.993],[1.139,1.758],[0.537,2.312],[0,2.637],[0,0]],"o":[[0.537,-2.327],[1.139,-1.774],[1.774,-1.025],[2.278,0],[1.676,0.781],[1.155,1.318],[0.732,1.677],[0,0],[-0.652,2.441],[-1.172,2.084],[-1.937,1.27],[-2.441,0],[-1.758,-0.993],[-1.14,-1.758],[-0.537,-2.311],[0,0],[0,-2.637]],"v":[[14.526,-34.302],[17.041,-40.454],[21.411,-44.653],[27.783,-46.191],[33.716,-45.02],[37.964,-41.87],[40.796,-37.378],[42.48,-32.178],[42.48,-20.41],[39.746,-13.623],[35.083,-8.594],[27.686,-6.689],[21.387,-8.179],[17.041,-12.305],[14.526,-18.408],[13.721,-25.83],[13.721,-26.855]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"d","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"t","size":19,"style":"Regular","w":32.71,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.439,-52.832],[0.439,-45.898],[29.004,-45.898],[29.004,-52.832]],"c":true},"ix":2},"nm":"t","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-1.091,-2.067],[-1.855,-0.879],[-2.214,0],[-1.156,0.211],[-0.716,0.227],[0,0],[0.83,-0.146],[0.748,0],[0.879,0.293],[0.553,0.912],[0,1.791],[0,0],[0,0]],"o":[[0,3.516],[1.09,2.068],[1.855,0.879],[1.627,0],[1.155,-0.212],[0,0],[-0.423,0.098],[-0.83,0.146],[-1.009,0],[-0.879,-0.293],[-0.554,-0.911],[0,0],[0,0],[0,0]],"v":[[10.107,-13.135],[11.743,-4.761],[16.162,-0.342],[22.266,0.977],[26.44,0.659],[29.248,0],[29.199,-7.373],[27.319,-7.007],[24.951,-6.787],[22.119,-7.227],[19.971,-9.033],[19.141,-13.086],[19.141,-65.674],[10.107,-65.674]],"c":true},"ix":2},"nm":"t","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"t","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"p","size":19,"style":"Regular","w":56.15,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.137,-52.832],[6.836,-52.832],[6.836,20.312],[15.918,20.312],[15.918,-42.676]],"c":true},"ix":2},"nm":"p","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.895,3.304],[1.758,2.377],[2.571,1.286],[3.32,0],[2.539,-1.155],[1.774,-2.197],[1.074,-3.092],[0.391,-3.906],[0,0],[-1.058,-2.962],[-1.791,-2.116],[-2.572,-1.106],[-3.353,0],[-2.539,1.334],[-1.742,2.409],[-0.912,3.271],[0,3.841],[0,0]],"o":[[-0.896,-3.304],[-1.758,-2.376],[-2.572,-1.286],[-3.32,0],[-2.539,1.156],[-1.775,2.197],[-1.074,3.093],[0,0],[0.391,3.711],[1.057,2.962],[1.79,2.116],[2.571,1.106],[3.288,0],[2.539,-1.334],[1.741,-2.409],[0.911,-3.271],[0,0],[0,-4.036]],"v":[[50.171,-37.866],[46.191,-46.387],[39.697,-51.88],[30.859,-53.809],[22.07,-52.075],[15.601,-47.046],[11.328,-39.111],[9.131,-28.613],[9.131,-23.145],[11.304,-13.135],[15.576,-5.518],[22.119,-0.684],[31.006,0.977],[39.746,-1.025],[46.167,-6.641],[50.146,-15.161],[51.514,-25.83],[51.514,-26.855]],"c":true},"ix":2},"nm":"p","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.553,-2.327],[1.155,-1.79],[1.774,-1.025],[2.441,0],[1.953,1.221],[1.172,2.002],[0.651,2.279],[0,0],[-0.732,1.677],[-1.172,1.318],[-1.677,0.781],[-2.279,0],[-1.791,-1.025],[-1.156,-1.774],[-0.554,-2.327],[0,-2.637],[0,0]],"o":[[-0.554,2.328],[-1.156,1.791],[-1.775,1.025],[-2.962,0],[-1.953,-1.221],[-1.172,-2.002],[0,0],[0.358,-1.79],[0.732,-1.676],[1.172,-1.318],[1.676,-0.781],[2.473,0],[1.79,1.025],[1.155,1.775],[0.553,2.328],[0,0],[0,2.637]],"v":[[41.602,-18.384],[39.038,-12.207],[34.644,-7.983],[28.32,-6.445],[20.947,-8.276],[16.26,-13.11],[13.525,-19.531],[13.525,-32.178],[15.161,-37.378],[18.018,-41.87],[22.29,-45.02],[28.223,-46.191],[34.619,-44.653],[39.038,-40.454],[41.602,-34.302],[42.432,-26.855],[42.432,-25.83]],"c":true},"ix":2},"nm":"p","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"p","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"x","size":19,"style":"Regular","w":49.61,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.588,-52.832],[19.824,-26.758],[2.051,0],[12.549,0],[24.756,-19.824],[36.963,0],[47.412,0],[29.59,-26.758],[46.875,-52.832],[36.279,-52.832],[24.561,-33.594],[12.988,-52.832]],"c":true},"ix":2},"nm":"x","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"x","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"R","size":19,"style":"Regular","w":61.62,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-2.295,-1.123],[-1.074,-2.051],[0,-2.734],[1.139,-2.018],[2.246,-1.188],[3.385,0],[0,0],[0,0],[0,0],[0,0],[-2.458,1.872],[-1.318,2.686],[0,3.255],[1.936,3.174],[3.694,1.628],[5.338,0],[0,0]],"o":[[0,0],[0,0],[0,0],[3.613,0],[2.295,1.123],[1.074,2.051],[0,2.441],[-1.14,2.019],[-2.246,1.189],[0,0],[0,0],[0,0],[0,0],[3.418,-0.911],[2.457,-1.871],[1.318,-2.686],[0,-4.622],[-1.937,-3.174],[-3.695,-1.627],[0,0],[0,0]],"v":[[8.252,0],[17.676,0],[17.676,-63.379],[31.787,-63.379],[40.649,-61.694],[45.703,-56.934],[47.314,-49.756],[45.605,-43.066],[40.527,-38.257],[32.08,-36.475],[15.381,-36.475],[15.479,-28.809],[37.598,-28.809],[40.234,-29.834],[49.048,-34.009],[54.712,-40.845],[56.689,-49.756],[53.784,-61.45],[45.337,-68.652],[31.787,-71.094],[8.252,-71.094]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[59.863,0],[59.863,-0.586],[42.334,-32.275],[32.52,-32.227],[49.805,0]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"R","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"-","size":19,"style":"Regular","w":27.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.855,-33.936],[1.855,-26.514],[25.684,-26.514],[25.684,-33.936]],"c":true},"ix":2},"nm":"-","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"-","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"3","size":19,"style":"Regular","w":56.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.767,1.123],[-1.742,1.758],[-0.83,2.035],[0,1.791],[1.79,2.979],[3.223,1.514],[4.297,0],[3.304,-1.758],[1.823,-2.962],[0,-3.613],[0,0],[-1.091,1.823],[-1.937,0.993],[-2.539,0],[-1.823,-0.944],[-0.912,-1.855],[0,-2.734],[1.025,-1.839],[2.067,-1.057],[3.157,0],[0,0]],"o":[[0,0],[3.873,0],[2.766,-1.123],[1.741,-1.758],[0.83,-2.034],[0,-4.427],[-1.791,-2.979],[-3.223,-1.514],[-4.362,0],[-3.304,1.758],[-1.823,2.962],[0,0],[0,-2.473],[1.09,-1.823],[1.936,-0.993],[2.799,0],[1.823,0.945],[0.911,1.855],[0,2.312],[-1.025,1.839],[-2.068,1.058],[0,0],[0,0]],"v":[[19.092,-34.521],[26.807,-34.521],[36.768,-36.206],[43.53,-40.527],[47.388,-46.216],[48.633,-51.953],[45.947,-63.062],[38.428,-69.8],[27.148,-72.07],[15.649,-69.434],[7.959,-62.354],[5.225,-52.49],[14.258,-52.49],[15.894,-58.936],[20.435,-63.159],[27.148,-64.648],[34.082,-63.232],[38.184,-59.033],[39.551,-52.148],[38.013,-45.923],[33.374,-41.577],[25.537,-39.99],[19.092,-39.99]],"c":true},"ix":2},"nm":"3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-2.263,-0.928],[-1.237,-1.904],[0,-2.962],[1.09,-1.953],[2.002,-0.96],[2.766,0],[2.034,1.025],[1.09,1.855],[0,2.474],[0,0],[-1.172,-2.457],[-2.084,-1.676],[-2.718,-0.879],[-3.093,0],[-2.734,0.911],[-2.035,1.791],[-1.123,2.572],[0,3.32],[0.7,2.132],[1.709,1.791],[2.962,1.074],[4.524,0],[0,0],[0,0]],"o":[[3.059,0],[2.262,0.928],[1.237,1.904],[0,2.962],[-1.091,1.953],[-2.002,0.961],[-2.767,0],[-2.035,-1.025],[-1.091,-1.855],[0,0],[0,3.158],[1.172,2.458],[2.083,1.677],[2.718,0.879],[3.223,0],[2.734,-0.911],[2.034,-1.79],[1.123,-2.571],[0,-2.116],[-0.7,-2.132],[-1.709,-1.79],[-2.962,-1.074],[0,0],[0,0],[0,0]],"v":[[25.537,-32.568],[33.521,-31.177],[38.77,-26.929],[40.625,-19.629],[38.989,-12.256],[34.351,-7.886],[27.197,-6.445],[19.995,-7.983],[15.308,-12.305],[13.672,-18.799],[4.639,-18.799],[6.396,-10.376],[11.279,-4.175],[18.481,-0.342],[27.197,0.977],[36.133,-0.391],[43.286,-4.443],[48.022,-10.986],[49.707,-19.824],[48.657,-26.196],[45.044,-32.08],[38.037,-36.377],[26.807,-37.988],[19.092,-37.988],[19.092,-32.568]],"c":true},"ix":2},"nm":"3","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"3","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"4","size":19,"style":"Regular","w":56.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.842,-23.926],[33.887,-56.836],[41.797,-71.094],[34.424,-71.094],[2.588,-21.826],[2.588,-16.504],[53.955,-16.504],[53.955,-23.926]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[35.01,-71.094],[35.01,0],[44.043,0],[44.043,-71.094]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"4","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"9","size":19,"style":"Regular","w":56.2,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-4.021,1.579],[-2.507,2.718],[-1.318,3.451],[-0.472,3.793],[0,3.679],[0,0],[0.846,3.418],[1.807,2.734],[2.864,1.628],[4.069,0],[2.75,-1.27],[1.855,-2.262],[0.944,-2.962],[0,-3.385],[-0.798,-2.815],[-1.644,-2.278],[-2.572,-1.367],[-3.516,0],[-2.539,1.286],[-1.888,2.148],[-1.058,2.621],[0,2.702],[0,0],[0.83,-1.758],[1.383,-1.383],[1.774,-0.797],[2.018,0],[1.611,0.928],[1.074,1.595],[0.52,1.986],[0,2.116],[-0.586,2.019],[-1.123,1.498],[-1.644,0.83],[-2.084,0],[-1.628,-0.879],[-1.286,-1.692],[-0.732,-2.506],[0,-3.223],[0,0],[0.651,-3.108],[1.758,-2.473],[3.255,-1.465],[5.208,0],[0,0]],"o":[[0,0],[5.891,0],[4.02,-1.579],[2.506,-2.718],[1.318,-3.45],[0.471,-3.792],[0,0],[0,-3.613],[-0.847,-3.418],[-1.807,-2.734],[-2.865,-1.627],[-3.613,0],[-2.751,1.27],[-1.855,2.263],[-0.945,2.962],[0,2.898],[0.797,2.816],[1.643,2.279],[2.571,1.367],[2.995,0],[2.539,-1.286],[1.888,-2.148],[1.057,-2.62],[0,0],[-0.13,1.921],[-0.83,1.758],[-1.384,1.384],[-1.775,0.798],[-2.181,0],[-1.611,-0.928],[-1.074,-1.595],[-0.521,-1.985],[0,-2.376],[0.586,-2.018],[1.123,-1.497],[1.643,-0.83],[1.823,0],[1.627,0.879],[1.286,1.693],[0.732,2.507],[0,0],[0,3.288],[-0.652,3.109],[-1.758,2.474],[-3.255,1.465],[0,0],[0,0]],"v":[[14.893,0.098],[15.82,0.098],[30.688,-2.271],[40.479,-8.716],[46.216,-17.969],[48.901,-28.833],[49.609,-40.039],[49.609,-43.311],[48.34,-53.857],[44.36,-63.086],[37.354,-69.629],[26.953,-72.07],[17.407,-70.166],[10.498,-64.868],[6.299,-57.031],[4.883,-47.51],[6.079,-38.94],[9.741,-31.299],[16.064,-25.83],[25.195,-23.779],[33.496,-25.708],[40.137,-30.859],[44.556,-38.013],[46.143,-45.996],[41.846,-45.996],[40.405,-40.479],[37.085,-35.767],[32.349,-32.495],[26.66,-31.299],[20.972,-32.69],[16.943,-36.475],[14.551,-41.846],[13.77,-47.998],[14.648,-54.59],[17.212,-59.863],[21.362,-63.354],[26.953,-64.6],[32.129,-63.281],[36.499,-59.424],[39.526,-53.125],[40.625,-44.531],[40.625,-33.643],[39.648,-24.048],[36.035,-15.674],[28.516,-9.766],[15.82,-7.568],[14.893,-7.568]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"9","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"}]}
\ No newline at end of file
diff --git a/cc/test/fake_content_layer_client.cc b/cc/test/fake_content_layer_client.cc
index f8da54b..44d3578 100644
--- a/cc/test/fake_content_layer_client.cc
+++ b/cc/test/fake_content_layer_client.cc
@@ -38,12 +38,14 @@
     const gfx::Rect& dst,
     float t,
     SkottieFrameDataMap images,
-    SkottieColorMap color_map)
+    SkottieColorMap color_map,
+    SkottieTextPropertyValueMap text_map)
     : skottie(std::move(skottie)),
       dst(dst),
       t(t),
       images(std::move(images)),
-      color_map(std::move(color_map)) {}
+      color_map(std::move(color_map)),
+      text_map(std::move(text_map)) {}
 
 FakeContentLayerClient::SkottieData::SkottieData(const SkottieData& other) =
     default;
@@ -110,7 +112,8 @@
     display_list->StartPaint();
     display_list->push<DrawSkottieOp>(
         skottie_data.skottie, gfx::RectToSkRect(skottie_data.dst),
-        skottie_data.t, skottie_data.images, skottie_data.color_map);
+        skottie_data.t, skottie_data.images, skottie_data.color_map,
+        skottie_data.text_map);
     display_list->EndPaintOfUnpaired(PaintableRegion());
   }
 
diff --git a/cc/test/fake_content_layer_client.h b/cc/test/fake_content_layer_client.h
index 0ad902a..d82e461 100644
--- a/cc/test/fake_content_layer_client.h
+++ b/cc/test/fake_content_layer_client.h
@@ -18,6 +18,7 @@
 #include "cc/paint/paint_image_builder.h"
 #include "cc/paint/skottie_color_map.h"
 #include "cc/paint/skottie_frame_data.h"
+#include "cc/paint/skottie_text_property_value.h"
 #include "cc/paint/skottie_wrapper.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkRefCnt.h"
@@ -52,7 +53,8 @@
                 const gfx::Rect& dst,
                 float t,
                 SkottieFrameDataMap images,
-                SkottieColorMap color_map);
+                SkottieColorMap color_map,
+                SkottieTextPropertyValueMap text_map);
     SkottieData(const SkottieData& other);
     SkottieData& operator=(const SkottieData& other);
     ~SkottieData();
@@ -62,6 +64,7 @@
     float t;
     SkottieFrameDataMap images;
     SkottieColorMap color_map;
+    SkottieTextPropertyValueMap text_map;
   };
 
   FakeContentLayerClient();
diff --git a/cc/test/lottie_test_data.h b/cc/test/lottie_test_data.h
index ad9bfe2..f682bfc 100644
--- a/cc/test/lottie_test_data.h
+++ b/cc/test/lottie_test_data.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#include "base/files/file_path.h"
 #include "base/strings/string_piece.h"
 #include "base/time/time.h"
 
@@ -287,6 +288,14 @@
     base::StringPiece custom_asset_id_0,
     base::StringPiece custom_asset_id_1);
 
+// cc/test/data/lottie/animation_with_2_text_nodes.json
+constexpr base::FilePath::CharType kLottieDataWith2TextFileName[] =
+    FILE_PATH_LITERAL("animation_with_2_text_nodes.json");
+constexpr base::StringPiece kLottieDataWith2TextNode1 = "text_node_1";
+constexpr base::StringPiece kLottieDataWith2TextNode1Text = "test_text_1";
+constexpr base::StringPiece kLottieDataWith2TextNode2 = "text_node_2";
+constexpr base::StringPiece kLottieDataWith2TextNode2Text = "test_text_2";
+
 }  // namespace cc
 
 #endif  // CC_TEST_LOTTIE_TEST_DATA_H_
diff --git a/cc/test/skia_common.cc b/cc/test/skia_common.cc
index a5ea4cf..9a6f3f6 100644
--- a/cc/test/skia_common.cc
+++ b/cc/test/skia_common.cc
@@ -11,7 +11,11 @@
 #include <utility>
 #include <vector>
 
+#include "base/base_paths.h"
+#include "base/check.h"
 #include "base/containers/span.h"
+#include "base/files/file_util.h"
+#include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "cc/paint/display_item_list.h"
 #include "cc/paint/draw_image.h"
@@ -251,6 +255,18 @@
       std::vector<uint8_t>(json_span.begin(), json_span.end()));
 }
 
+scoped_refptr<SkottieWrapper> CreateSkottieFromTestDataDir(
+    base::FilePath::StringPieceType animation_file_name) {
+  base::FilePath animation_path;
+  CHECK(base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT, &animation_path));
+  animation_path = animation_path.AppendASCII("cc/test/data/lottie")
+                       .Append(base::FilePath(animation_file_name));
+  std::string animation_json;
+  CHECK(base::ReadFileToString(animation_path, &animation_json))
+      << animation_path;
+  return CreateSkottieFromString(animation_json);
+}
+
 PaintImage CreateNonDiscardablePaintImage(const gfx::Size& size) {
   auto context = GrDirectContext::MakeMock(nullptr);
   SkBitmap bitmap;
diff --git a/cc/test/skia_common.h b/cc/test/skia_common.h
index 9b640c1..1f59d09 100644
--- a/cc/test/skia_common.h
+++ b/cc/test/skia_common.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
@@ -78,6 +79,8 @@
 scoped_refptr<SkottieWrapper> CreateSkottie(const gfx::Size& size,
                                             int duration_secs);
 scoped_refptr<SkottieWrapper> CreateSkottieFromString(base::StringPiece json);
+scoped_refptr<SkottieWrapper> CreateSkottieFromTestDataDir(
+    base::FilePath::StringPieceType animation_file_name);
 
 PaintImage CreateNonDiscardablePaintImage(const gfx::Size& size);
 
diff --git a/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h b/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h
index b0dcc3f..a4329dc 100644
--- a/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h
+++ b/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h
@@ -92,12 +92,13 @@
                     const SkSamplingOptions&,
                     const cc::PaintFlags* flags,
                     SkCanvas::SrcRectConstraint constraint));
-  MOCK_METHOD5(drawSkottie,
+  MOCK_METHOD6(drawSkottie,
                void(scoped_refptr<cc::SkottieWrapper> skottie,
                     const SkRect& dst,
                     float t,
                     cc::SkottieFrameDataMap images,
-                    const cc::SkottieColorMap& color_map));
+                    const cc::SkottieColorMap& color_map,
+                    cc::SkottieTextPropertyValueMap text_map));
   MOCK_METHOD4(drawBitmap,
                void(const SkBitmap& bitmap,
                     SkScalar left,
diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc
index 26805d2..6a31e56 100644
--- a/ui/gfx/canvas.cc
+++ b/ui/gfx/canvas.cc
@@ -397,9 +397,10 @@
                          const Rect& dst,
                          float t,
                          cc::SkottieFrameDataMap images,
-                         const cc::SkottieColorMap& color_map) {
+                         const cc::SkottieColorMap& color_map,
+                         cc::SkottieTextPropertyValueMap text_map) {
   canvas_->drawSkottie(std::move(skottie), RectToSkRect(dst), t,
-                       std::move(images), color_map);
+                       std::move(images), color_map, std::move(text_map));
 }
 
 void Canvas::DrawStringRect(const std::u16string& text,
diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h
index 7f3b911..c2b0ebb 100644
--- a/ui/gfx/canvas.h
+++ b/ui/gfx/canvas.h
@@ -17,6 +17,7 @@
 #include "cc/paint/skia_paint_canvas.h"
 #include "cc/paint/skottie_color_map.h"
 #include "cc/paint/skottie_frame_data.h"
+#include "cc/paint/skottie_text_property_value.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/image/image_skia.h"
 #include "ui/gfx/native_widget_types.h"
@@ -366,7 +367,8 @@
                    const Rect& dst,
                    float t,
                    cc::SkottieFrameDataMap images,
-                   const cc::SkottieColorMap& color_map);
+                   const cc::SkottieColorMap& color_map,
+                   cc::SkottieTextPropertyValueMap text_map);
 
   // Draws text with the specified color, fonts and location. The text is
   // aligned to the left, vertically centered, clipped to the region. If the
diff --git a/ui/lottie/animation.cc b/ui/lottie/animation.cc
index 0622e284..2fff105b 100644
--- a/ui/lottie/animation.cc
+++ b/ui/lottie/animation.cc
@@ -234,7 +234,7 @@
                                         base::Unretained(this), canvas,
                                         std::ref(all_frame_data)));
   canvas->DrawSkottie(skottie(), gfx::Rect(size), t, std::move(all_frame_data),
-                      color_map_);
+                      color_map_, cc::SkottieTextPropertyValueMap());
 }
 
 cc::SkottieWrapper::FrameDataFetchResult Animation::LoadImageForAsset(