[graphite] Add 8-stop gradients

Bug: skia:13302
Change-Id: Id9927ffadfbbbc5578491284969736e3b5f60f26
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/541725
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: James Godfrey-Kittle <jamesgk@google.com>
diff --git a/src/core/SkBuiltInCodeSnippetID.h b/src/core/SkBuiltInCodeSnippetID.h
index cd1a5e9..8653b14 100644
--- a/src/core/SkBuiltInCodeSnippetID.h
+++ b/src/core/SkBuiltInCodeSnippetID.h
@@ -23,10 +23,14 @@
 
     // SkShader code snippets
     kSolidColorShader,
-    kLinearGradientShader,
-    kRadialGradientShader,
-    kSweepGradientShader,
-    kConicalGradientShader,
+    kLinearGradientShader4,
+    kLinearGradientShader8,
+    kRadialGradientShader4,
+    kRadialGradientShader8,
+    kSweepGradientShader4,
+    kSweepGradientShader8,
+    kConicalGradientShader4,
+    kConicalGradientShader8,
 
     kLocalMatrixShader,
     kImageShader,
diff --git a/src/core/SkKeyHelpers.cpp b/src/core/SkKeyHelpers.cpp
index 739cb16..2749ecc 100644
--- a/src/core/SkKeyHelpers.cpp
+++ b/src/core/SkKeyHelpers.cpp
@@ -23,8 +23,7 @@
 #endif
 
 #define VALIDATE_UNIFORMS(gatherer, dict, codeSnippetID) \
-    SkDEBUGCODE(UniformExpectationsValidator uev( \
-        gatherer, dict->getUniforms(SkBuiltInCodeSnippetID::codeSnippetID));)
+    SkDEBUGCODE(UniformExpectationsValidator uev(gatherer, dict->getUniforms(codeSnippetID));)
 
 constexpr SkPMColor4f kErrorColor = { 1, 0, 0, 1 };
 
@@ -72,7 +71,7 @@
 void add_solid_uniform_data(const SkShaderCodeDictionary* dict,
                             const SkPMColor4f& premulColor,
                             SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kSolidColorShader)
+    VALIDATE_UNIFORMS(gatherer, dict, SkBuiltInCodeSnippetID::kSolidColorShader)
     gatherer->write(premulColor);
 
     gatherer->addFlags(dict->getSnippetRequirementFlags(SkBuiltInCodeSnippetID::kSolidColorShader));
@@ -121,9 +120,11 @@
 static const int kBlockDataSize = 0;
 
 void add_linear_gradient_uniform_data(const SkShaderCodeDictionary* dict,
+                                      SkBuiltInCodeSnippetID codeSnippetID,
                                       const GradientData& gradData,
                                       SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kLinearGradientShader)
+    VALIDATE_UNIFORMS(gatherer, dict, codeSnippetID)
+    int stops = codeSnippetID == SkBuiltInCodeSnippetID::kLinearGradientShader4 ? 4 : 8;
 
     SkM44 lmInverse;
     bool wasInverted = gradData.fLocalMatrix.invert(&lmInverse);  // TODO: handle failure up stack
@@ -132,8 +133,8 @@
     }
 
     gatherer->write(lmInverse);
-    gatherer->write(gradData.fColor4fs, GradientData::kMaxStops);
-    gatherer->write(gradData.fOffsets, GradientData::kMaxStops);
+    gatherer->write(gradData.fColor4fs, stops);
+    gatherer->write(gradData.fOffsets, stops);
     gatherer->write(gradData.fPoints[0]);
     gatherer->write(gradData.fPoints[1]);
     gatherer->write(static_cast<int>(gradData.fTM));
@@ -141,14 +142,15 @@
     gatherer->write(0.0f);
     gatherer->write(0.0f);
 
-    gatherer->addFlags(
-            dict->getSnippetRequirementFlags(SkBuiltInCodeSnippetID::kLinearGradientShader));
+    gatherer->addFlags(dict->getSnippetRequirementFlags(codeSnippetID));
 };
 
 void add_radial_gradient_uniform_data(const SkShaderCodeDictionary* dict,
+                                      SkBuiltInCodeSnippetID codeSnippetID,
                                       const GradientData& gradData,
                                       SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kRadialGradientShader)
+    VALIDATE_UNIFORMS(gatherer, dict, codeSnippetID)
+    int stops = codeSnippetID == SkBuiltInCodeSnippetID::kRadialGradientShader4 ? 4 : 8;
 
     SkM44 lmInverse;
     bool wasInverted = gradData.fLocalMatrix.invert(&lmInverse);  // TODO: handle failure up stack
@@ -157,20 +159,21 @@
     }
 
     gatherer->write(lmInverse);
-    gatherer->write(gradData.fColor4fs, GradientData::kMaxStops);
-    gatherer->write(gradData.fOffsets, GradientData::kMaxStops);
+    gatherer->write(gradData.fColor4fs, stops);
+    gatherer->write(gradData.fOffsets, stops);
     gatherer->write(gradData.fPoints[0]);
     gatherer->write(gradData.fRadii[0]);
     gatherer->write(static_cast<int>(gradData.fTM));
 
-    gatherer->addFlags(
-            dict->getSnippetRequirementFlags(SkBuiltInCodeSnippetID::kRadialGradientShader));
+    gatherer->addFlags(dict->getSnippetRequirementFlags(codeSnippetID));
 };
 
 void add_sweep_gradient_uniform_data(const SkShaderCodeDictionary* dict,
+                                     SkBuiltInCodeSnippetID codeSnippetID,
                                      const GradientData& gradData,
                                      SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kSweepGradientShader)
+    VALIDATE_UNIFORMS(gatherer, dict, codeSnippetID)
+    int stops = codeSnippetID == SkBuiltInCodeSnippetID::kSweepGradientShader4 ? 4 : 8;
 
     SkM44 lmInverse;
     bool wasInverted = gradData.fLocalMatrix.invert(&lmInverse);  // TODO: handle failure up stack
@@ -179,8 +182,8 @@
     }
 
     gatherer->write(lmInverse);
-    gatherer->write(gradData.fColor4fs, GradientData::kMaxStops);
-    gatherer->write(gradData.fOffsets, GradientData::kMaxStops);
+    gatherer->write(gradData.fColor4fs, stops);
+    gatherer->write(gradData.fOffsets, stops);
     gatherer->write(gradData.fPoints[0]);
     gatherer->write(gradData.fBias);
     gatherer->write(gradData.fScale);
@@ -189,14 +192,15 @@
     gatherer->write(0.0f);
     gatherer->write(0.0f);
 
-    gatherer->addFlags(
-            dict->getSnippetRequirementFlags(SkBuiltInCodeSnippetID::kSweepGradientShader));
+    gatherer->addFlags(dict->getSnippetRequirementFlags(codeSnippetID));
 };
 
 void add_conical_gradient_uniform_data(const SkShaderCodeDictionary* dict,
+                                       SkBuiltInCodeSnippetID codeSnippetID,
                                        const GradientData& gradData,
                                        SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kConicalGradientShader)
+    VALIDATE_UNIFORMS(gatherer, dict, codeSnippetID)
+    int stops = codeSnippetID == SkBuiltInCodeSnippetID::kConicalGradientShader4 ? 4 : 8;
 
     SkM44 lmInverse;
     bool wasInverted = gradData.fLocalMatrix.invert(&lmInverse);  // TODO: handle failure up stack
@@ -205,8 +209,8 @@
     }
 
     gatherer->write(lmInverse);
-    gatherer->write(gradData.fColor4fs, GradientData::kMaxStops);
-    gatherer->write(gradData.fOffsets, GradientData::kMaxStops);
+    gatherer->write(gradData.fColor4fs, stops);
+    gatherer->write(gradData.fOffsets, stops);
     gatherer->write(gradData.fPoints[0]);
     gatherer->write(gradData.fPoints[1]);
     gatherer->write(gradData.fRadii[0]);
@@ -214,8 +218,7 @@
     gatherer->write(static_cast<int>(gradData.fTM));
     gatherer->write(0.0f);  // padding
 
-    gatherer->addFlags(
-            dict->getSnippetRequirementFlags(SkBuiltInCodeSnippetID::kConicalGradientShader));
+    gatherer->addFlags(dict->getSnippetRequirementFlags(codeSnippetID));
 };
 
 #endif // SK_GRAPHITE_ENABLED
@@ -285,27 +288,35 @@
         SkBuiltInCodeSnippetID codeSnippetID = SkBuiltInCodeSnippetID::kSolidColorShader;
         switch (gradData.fType) {
             case SkShader::kLinear_GradientType:
-                codeSnippetID = SkBuiltInCodeSnippetID::kLinearGradientShader;
+                codeSnippetID = gradData.fNumStops <= 4
+                                        ? SkBuiltInCodeSnippetID::kLinearGradientShader4
+                                        : SkBuiltInCodeSnippetID::kLinearGradientShader8;
                 if (gatherer) {
-                    add_linear_gradient_uniform_data(dict, gradData, gatherer);
+                    add_linear_gradient_uniform_data(dict, codeSnippetID, gradData, gatherer);
                 }
                 break;
             case SkShader::kRadial_GradientType:
-                codeSnippetID = SkBuiltInCodeSnippetID::kRadialGradientShader;
+                codeSnippetID = gradData.fNumStops <= 4
+                                        ? SkBuiltInCodeSnippetID::kRadialGradientShader4
+                                        : SkBuiltInCodeSnippetID::kRadialGradientShader8;
                 if (gatherer) {
-                    add_radial_gradient_uniform_data(dict, gradData, gatherer);
+                    add_radial_gradient_uniform_data(dict, codeSnippetID, gradData, gatherer);
                 }
                 break;
             case SkShader::kSweep_GradientType:
-                codeSnippetID = SkBuiltInCodeSnippetID::kSweepGradientShader;
+                codeSnippetID = gradData.fNumStops <= 4
+                                        ? SkBuiltInCodeSnippetID::kSweepGradientShader4
+                                        : SkBuiltInCodeSnippetID::kSweepGradientShader8;
                 if (gatherer) {
-                    add_sweep_gradient_uniform_data(dict, gradData, gatherer);
+                    add_sweep_gradient_uniform_data(dict, codeSnippetID, gradData, gatherer);
                 }
                 break;
             case SkShader::GradientType::kConical_GradientType:
-                codeSnippetID = SkBuiltInCodeSnippetID::kConicalGradientShader;
+                codeSnippetID = gradData.fNumStops <= 4
+                                        ? SkBuiltInCodeSnippetID::kConicalGradientShader4
+                                        : SkBuiltInCodeSnippetID::kConicalGradientShader8;
                 if (gatherer) {
-                    add_conical_gradient_uniform_data(dict, gradData, gatherer);
+                    add_conical_gradient_uniform_data(dict, codeSnippetID, gradData, gatherer);
                 }
                 break;
             case SkShader::GradientType::kColor_GradientType:
@@ -341,7 +352,7 @@
 void add_localmatrixshader_uniform_data(const SkShaderCodeDictionary* dict,
                                         const SkM44& localMatrix,
                                         SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kLocalMatrixShader)
+    VALIDATE_UNIFORMS(gatherer, dict, SkBuiltInCodeSnippetID::kLocalMatrixShader)
 
     SkM44 lmInverse;
     bool wasInverted = localMatrix.invert(&lmInverse);  // TODO: handle failure up stack
@@ -410,7 +421,7 @@
 void add_image_uniform_data(const SkShaderCodeDictionary* dict,
                             const ImageData& imgData,
                             SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kImageShader)
+    VALIDATE_UNIFORMS(gatherer, dict, SkBuiltInCodeSnippetID::kImageShader)
 
     SkMatrix lmInverse;
     bool wasInverted = imgData.fLocalMatrix.invert(&lmInverse);  // TODO: handle failure up stack
@@ -494,7 +505,7 @@
 void add_blendshader_uniform_data(const SkShaderCodeDictionary* dict,
                                   SkBlendMode bm,
                                   SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kBlendShader)
+    VALIDATE_UNIFORMS(gatherer, dict, SkBuiltInCodeSnippetID::kBlendShader)
     gatherer->write(SkTo<int>(bm));
     gatherer->write(0); // padding - remove
     gatherer->write(0); // padding - remove
@@ -608,7 +619,7 @@
 void add_shaderbasedblender_uniform_data(const SkShaderCodeDictionary* dict,
                                          SkBlendMode bm,
                                          SkPipelineDataGatherer* gatherer) {
-    VALIDATE_UNIFORMS(gatherer, dict, kShaderBasedBlender)
+    VALIDATE_UNIFORMS(gatherer, dict, SkBuiltInCodeSnippetID::kShaderBasedBlender)
     gatherer->write(SkTo<int>(bm));
     gatherer->write(0); // padding - remove
     gatherer->write(0); // padding - remove
diff --git a/src/core/SkKeyHelpers.h b/src/core/SkKeyHelpers.h
index 3322af0..be80984 100644
--- a/src/core/SkKeyHelpers.h
+++ b/src/core/SkKeyHelpers.h
@@ -49,8 +49,8 @@
 namespace GradientShaderBlocks {
 
     struct GradientData {
-        // TODO: For the sprint we only support 4 stops in the gradients
-        static constexpr int kMaxStops = 4;
+        // TODO: For the sprint we only support 8 stops in the gradients
+        static constexpr int kMaxStops = 8;
 
         // This ctor is used during pre-compilation when we don't have enough information to
         // extract uniform data. However, we must be able to provide enough data to make all the
diff --git a/src/core/SkShaderCodeDictionary.cpp b/src/core/SkShaderCodeDictionary.cpp
index e083cde..f7e2f08 100644
--- a/src/core/SkShaderCodeDictionary.cpp
+++ b/src/core/SkShaderCodeDictionary.cpp
@@ -355,9 +355,10 @@
 
 //--------------------------------------------------------------------------------------------------
 static constexpr int kFourStopGradient = 4;
+static constexpr int kEightStopGradient = 8;
 
 static constexpr int kNumLinearGradientUniforms = 9;
-static constexpr SkUniform kLinearGradientUniforms[kNumLinearGradientUniforms] = {
+static constexpr SkUniform kLinearGradientUniforms4[kNumLinearGradientUniforms] = {
         { "localMatrix", SkSLType::kFloat4x4 },
         { "colors",      SkSLType::kFloat4, kFourStopGradient },
         { "offsets",     SkSLType::kFloat,  kFourStopGradient },
@@ -368,9 +369,20 @@
         { "padding2",    SkSLType::kFloat },
         { "padding3",    SkSLType::kFloat },
 };
+static constexpr SkUniform kLinearGradientUniforms8[kNumLinearGradientUniforms] = {
+        { "localMatrix", SkSLType::kFloat4x4 },
+        { "colors",      SkSLType::kFloat4, kEightStopGradient },
+        { "offsets",     SkSLType::kFloat,  kEightStopGradient },
+        { "point0",      SkSLType::kFloat2 },
+        { "point1",      SkSLType::kFloat2 },
+        { "tilemode",    SkSLType::kInt },
+        { "padding1",    SkSLType::kFloat }, // TODO: add automatic uniform padding
+        { "padding2",    SkSLType::kFloat },
+        { "padding3",    SkSLType::kFloat },
+};
 
 static constexpr int kNumRadialGradientUniforms = 6;
-static constexpr SkUniform kRadialGradientUniforms[kNumRadialGradientUniforms] = {
+static constexpr SkUniform kRadialGradientUniforms4[kNumRadialGradientUniforms] = {
         { "localMatrix", SkSLType::kFloat4x4 },
         { "colors",      SkSLType::kFloat4, kFourStopGradient },
         { "offsets",     SkSLType::kFloat,  kFourStopGradient },
@@ -378,9 +390,17 @@
         { "radius",      SkSLType::kFloat },
         { "tilemode",    SkSLType::kInt },
 };
+static constexpr SkUniform kRadialGradientUniforms8[kNumRadialGradientUniforms] = {
+        { "localMatrix", SkSLType::kFloat4x4 },
+        { "colors",      SkSLType::kFloat4, kEightStopGradient },
+        { "offsets",     SkSLType::kFloat,  kEightStopGradient },
+        { "center",      SkSLType::kFloat2 },
+        { "radius",      SkSLType::kFloat },
+        { "tilemode",    SkSLType::kInt },
+};
 
 static constexpr int kNumSweepGradientUniforms = 10;
-static constexpr SkUniform kSweepGradientUniforms[kNumSweepGradientUniforms] = {
+static constexpr SkUniform kSweepGradientUniforms4[kNumSweepGradientUniforms] = {
         { "localMatrix", SkSLType::kFloat4x4 },
         { "colors",      SkSLType::kFloat4, kFourStopGradient },
         { "offsets",     SkSLType::kFloat,  kFourStopGradient },
@@ -392,9 +412,21 @@
         { "padding2",    SkSLType::kFloat },
         { "padding3",    SkSLType::kFloat },
 };
+static constexpr SkUniform kSweepGradientUniforms8[kNumSweepGradientUniforms] = {
+        { "localMatrix", SkSLType::kFloat4x4 },
+        { "colors",      SkSLType::kFloat4, kEightStopGradient },
+        { "offsets",     SkSLType::kFloat,  kEightStopGradient },
+        { "center",      SkSLType::kFloat2 },
+        { "bias",        SkSLType::kFloat },
+        { "scale",       SkSLType::kFloat },
+        { "tilemode",    SkSLType::kInt },
+        { "padding1",    SkSLType::kFloat }, // TODO: add automatic uniform padding
+        { "padding2",    SkSLType::kFloat },
+        { "padding3",    SkSLType::kFloat },
+};
 
 static constexpr int kNumConicalGradientUniforms = 9;
-static constexpr SkUniform kConicalGradientUniforms[kNumConicalGradientUniforms] = {
+static constexpr SkUniform kConicalGradientUniforms4[kNumConicalGradientUniforms] = {
         { "localMatrix", SkSLType::kFloat4x4 },
         { "colors",      SkSLType::kFloat4, kFourStopGradient },
         { "offsets",     SkSLType::kFloat,  kFourStopGradient },
@@ -405,11 +437,26 @@
         { "tilemode",    SkSLType::kInt },
         { "padding",     SkSLType::kFloat }, // TODO: add automatic uniform padding
 };
+static constexpr SkUniform kConicalGradientUniforms8[kNumConicalGradientUniforms] = {
+        { "localMatrix", SkSLType::kFloat4x4 },
+        { "colors",      SkSLType::kFloat4, kEightStopGradient },
+        { "offsets",     SkSLType::kFloat,  kEightStopGradient },
+        { "point0",      SkSLType::kFloat2 },
+        { "point1",      SkSLType::kFloat2 },
+        { "radius0",     SkSLType::kFloat },
+        { "radius1",     SkSLType::kFloat },
+        { "tilemode",    SkSLType::kInt },
+        { "padding",     SkSLType::kFloat }, // TODO: add automatic uniform padding
+};
 
 static constexpr char kLinearGradient4Name[] = "sk_linear_grad_4_shader";
+static constexpr char kLinearGradient8Name[] = "sk_linear_grad_8_shader";
 static constexpr char kRadialGradient4Name[] = "sk_radial_grad_4_shader";
+static constexpr char kRadialGradient8Name[] = "sk_radial_grad_8_shader";
 static constexpr char kSweepGradient4Name[] = "sk_sweep_grad_4_shader";
+static constexpr char kSweepGradient8Name[] = "sk_sweep_grad_8_shader";
 static constexpr char kConicalGradient4Name[] = "sk_conical_grad_4_shader";
+static constexpr char kConicalGradient8Name[] = "sk_conical_grad_8_shader";
 
 //--------------------------------------------------------------------------------------------------
 static constexpr int kNumSolidShaderUniforms = 1;
@@ -694,9 +741,9 @@
             kNoChildren,
             { }
     };
-    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kLinearGradientShader] = {
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kLinearGradientShader4] = {
             "LinearGradient4",
-            SkMakeSpan(kLinearGradientUniforms, kNumLinearGradientUniforms),
+            SkMakeSpan(kLinearGradientUniforms4, kNumLinearGradientUniforms),
             SnippetRequirementFlags::kLocalCoords,
             { },     // no samplers
             kLinearGradient4Name,
@@ -704,9 +751,19 @@
             kNoChildren,
             { }
     };
-    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kRadialGradientShader] = {
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kLinearGradientShader8] = {
+            "LinearGradient8",
+            SkMakeSpan(kLinearGradientUniforms8, kNumLinearGradientUniforms),
+            SnippetRequirementFlags::kLocalCoords,
+            { },     // no samplers
+            kLinearGradient8Name,
+            GenerateDefaultGlueCode,
+            kNoChildren,
+            { }
+    };
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kRadialGradientShader4] = {
             "RadialGradient4",
-            SkMakeSpan(kRadialGradientUniforms, kNumRadialGradientUniforms),
+            SkMakeSpan(kRadialGradientUniforms4, kNumRadialGradientUniforms),
             SnippetRequirementFlags::kLocalCoords,
             { },     // no samplers
             kRadialGradient4Name,
@@ -714,9 +771,19 @@
             kNoChildren,
             { }
     };
-    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kSweepGradientShader] = {
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kRadialGradientShader8] = {
+            "RadialGradient8",
+            SkMakeSpan(kRadialGradientUniforms8, kNumRadialGradientUniforms),
+            SnippetRequirementFlags::kLocalCoords,
+            { },     // no samplers
+            kRadialGradient8Name,
+            GenerateDefaultGlueCode,
+            kNoChildren,
+            { }
+    };
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kSweepGradientShader4] = {
             "SweepGradient4",
-            SkMakeSpan(kSweepGradientUniforms, kNumSweepGradientUniforms),
+            SkMakeSpan(kSweepGradientUniforms4, kNumSweepGradientUniforms),
             SnippetRequirementFlags::kLocalCoords,
             { },     // no samplers
             kSweepGradient4Name,
@@ -724,9 +791,19 @@
             kNoChildren,
             { }
     };
-    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kConicalGradientShader] = {
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kSweepGradientShader8] = {
+            "SweepGradient8",
+            SkMakeSpan(kSweepGradientUniforms8, kNumSweepGradientUniforms),
+            SnippetRequirementFlags::kLocalCoords,
+            { },     // no samplers
+            kSweepGradient8Name,
+            GenerateDefaultGlueCode,
+            kNoChildren,
+            { }
+    };
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kConicalGradientShader4] = {
             "ConicalGradient4",
-            SkMakeSpan(kConicalGradientUniforms, kNumConicalGradientUniforms),
+            SkMakeSpan(kConicalGradientUniforms4, kNumConicalGradientUniforms),
             SnippetRequirementFlags::kLocalCoords,
             { },     // no samplers
             kConicalGradient4Name,
@@ -734,6 +811,16 @@
             kNoChildren,
             { }
     };
+    fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kConicalGradientShader8] = {
+            "ConicalGradient8",
+            SkMakeSpan(kConicalGradientUniforms8, kNumConicalGradientUniforms),
+            SnippetRequirementFlags::kLocalCoords,
+            { },     // no samplers
+            kConicalGradient8Name,
+            GenerateDefaultGlueCode,
+            kNoChildren,
+            { }
+    };
     fBuiltInCodeSnippets[(int) SkBuiltInCodeSnippetID::kLocalMatrixShader] = {
             "LocalMatrixShader",
             SkMakeSpan(kLocalMatrixShaderUniforms, kNumLocalMatrixShaderUniforms),
diff --git a/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl b/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl
index 9667382..d2b6b6a 100644
--- a/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl
+++ b/src/sksl/generated/sksl_graphite_frag.dehydrated.sksl
@@ -1,4 +1,4 @@
-static uint8_t SKSL_INCLUDE_sksl_graphite_frag[] = {11,0,83,6,
+static uint8_t SKSL_INCLUDE_sksl_graphite_frag[] = {11,0,196,6,
 8,115,107,95,101,114,114,111,114,
 5,104,97,108,102,52,
 10,99,111,108,111,114,80,97,114,97,109,
@@ -30,6 +30,7 @@
 11,99,111,108,111,114,115,80,97,114,97,109,
 12,111,102,102,115,101,116,115,80,97,114,97,109,
 16,36,99,111,108,111,114,105,122,101,95,103,114,97,100,95,52,
+16,36,99,111,108,111,114,105,122,101,95,103,114,97,100,95,56,
 11,112,111,105,110,116,48,80,97,114,97,109,
 11,112,111,105,110,116,49,80,97,114,97,109,
 3,112,111,115,
@@ -51,10 +52,14 @@
 8,112,97,100,100,105,110,103,49,
 8,112,97,100,100,105,110,103,50,
 23,115,107,95,108,105,110,101,97,114,95,103,114,97,100,95,52,95,115,104,97,100,101,114,
+23,115,107,95,108,105,110,101,97,114,95,103,114,97,100,95,56,95,115,104,97,100,101,114,
 23,115,107,95,114,97,100,105,97,108,95,103,114,97,100,95,52,95,115,104,97,100,101,114,
+23,115,107,95,114,97,100,105,97,108,95,103,114,97,100,95,56,95,115,104,97,100,101,114,
 22,115,107,95,115,119,101,101,112,95,103,114,97,100,95,52,95,115,104,97,100,101,114,
+22,115,107,95,115,119,101,101,112,95,103,114,97,100,95,56,95,115,104,97,100,101,114,
 7,112,97,100,100,105,110,103,
 24,115,107,95,99,111,110,105,99,97,108,95,103,114,97,100,95,52,95,115,104,97,100,101,114,
+24,115,107,95,99,111,110,105,99,97,108,95,103,114,97,100,95,56,95,115,104,97,100,101,114,
 9,98,108,101,110,100,77,111,100,101,
 3,115,114,99,
 3,100,115,116,
@@ -168,7 +173,7 @@
 14,98,108,101,110,100,95,109,117,108,116,105,112,108,121,
 10,98,108,101,110,100,95,104,115,108,99,
 5,104,97,108,102,50,
-52,1,107,0,
+52,1,159,0,
 28,1,0,
 17,2,0,0,
 51,255,255,11,0,
@@ -251,253 +256,404 @@
 28,28,0,
 17,7,1,3,25,0,26,0,27,0,
 51,255,255,11,0,
-55,29,0,
-17,24,1,
-51,255,255,209,0,3,
-55,30,0,
-17,36,1,
-51,255,255,209,0,3,
+0,29,0,
+51,255,255,28,0,8,
+0,30,0,
+51,255,255,116,0,8,
 55,31,0,
-17,48,1,
-51,255,255,209,0,3,
-28,32,0,
-17,52,1,3,29,0,30,0,31,0,
-51,255,255,209,0,
+17,238,0,
+51,29,0,3,
+55,32,0,
+17,250,0,
+51,30,0,3,
 55,33,0,
-17,72,1,
+17,225,0,
 51,255,255,209,0,3,
-55,34,0,
-17,84,1,
-51,255,255,116,0,3,
+28,34,0,
+17,24,1,3,31,0,32,0,33,0,
+51,255,255,11,0,
 55,35,0,
-17,48,1,
+17,41,1,
 51,255,255,209,0,3,
-28,36,0,
-17,96,1,3,33,0,34,0,35,0,
-51,255,255,209,0,
+55,36,0,
+17,53,1,
+51,255,255,209,0,3,
 55,37,0,
-17,72,1,
+17,65,1,
 51,255,255,209,0,3,
-55,38,0,
-17,116,1,
-51,255,255,116,0,3,
-55,39,0,
-17,126,1,
-51,255,255,116,0,3,
-55,40,0,
-17,48,1,
-51,255,255,209,0,3,
-28,41,0,
-17,137,1,4,37,0,38,0,39,0,40,0,
+28,38,0,
+17,69,1,3,35,0,36,0,37,0,
 51,255,255,209,0,
-55,42,0,
-17,156,1,
+55,39,0,
+17,89,1,
 51,255,255,209,0,3,
+55,40,0,
+17,101,1,
+51,255,255,116,0,3,
+55,41,0,
+17,65,1,
+51,255,255,209,0,3,
+28,42,0,
+17,113,1,3,39,0,40,0,41,0,
+51,255,255,209,0,
 55,43,0,
-17,159,1,
+17,89,1,
 51,255,255,209,0,3,
-28,44,0,
-17,162,1,2,42,0,43,0,
-51,255,255,177,1,
+55,44,0,
+17,133,1,
+51,255,255,116,0,3,
 55,45,0,
-17,24,1,
-51,255,255,209,0,3,
+17,143,1,
+51,255,255,116,0,3,
 55,46,0,
-17,36,1,
+17,65,1,
 51,255,255,209,0,3,
-55,47,0,
-17,186,1,
-51,255,255,116,0,3,
+28,47,0,
+17,154,1,4,43,0,44,0,45,0,46,0,
+51,255,255,209,0,
 55,48,0,
-17,199,1,
-51,255,255,116,0,3,
+17,173,1,
+51,255,255,209,0,3,
 55,49,0,
-17,48,1,
+17,176,1,
 51,255,255,209,0,3,
 28,50,0,
-17,212,1,5,45,0,46,0,47,0,48,0,49,0,
-51,255,255,209,0,
-0,51,0,
-51,255,255,28,0,4,
-0,52,0,
-51,255,255,116,0,4,
+17,179,1,2,48,0,49,0,
+51,255,255,194,1,
+55,51,0,
+17,41,1,
+51,255,255,209,0,3,
+55,52,0,
+17,53,1,
+51,255,255,209,0,3,
 55,53,0,
-17,147,0,
-51,255,255,63,0,3,
+17,203,1,
+51,255,255,116,0,3,
 55,54,0,
-17,238,0,
-51,51,0,3,
+17,216,1,
+51,255,255,116,0,3,
 55,55,0,
-17,250,0,
-51,52,0,3,
-55,56,0,
-17,24,1,
+17,65,1,
 51,255,255,209,0,3,
-55,57,0,
-17,36,1,
-51,255,255,209,0,3,
-55,58,0,
-17,216,0,
-51,255,255,110,0,3,
+28,56,0,
+17,229,1,5,51,0,52,0,53,0,54,0,55,0,
+51,255,255,209,0,
+0,57,0,
+51,255,255,28,0,4,
+0,58,0,
+51,255,255,116,0,4,
 55,59,0,
-17,233,1,
-51,255,255,116,0,3,
-55,60,0,
-17,242,1,
-51,255,255,116,0,3,
-55,61,0,
-17,251,1,
-51,255,255,116,0,3,
-28,62,0,
-17,4,2,9,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,
-51,255,255,11,0,
-0,63,0,
-51,255,255,28,0,4,
-0,64,0,
-51,255,255,116,0,4,
-55,65,0,
 17,147,0,
 51,255,255,63,0,3,
-55,66,0,
+55,60,0,
 17,238,0,
-51,63,0,3,
-55,67,0,
+51,57,0,3,
+55,61,0,
 17,250,0,
-51,64,0,3,
-55,68,0,
-17,72,1,
+51,58,0,3,
+55,62,0,
+17,41,1,
 51,255,255,209,0,3,
-55,69,0,
-17,84,1,
-51,255,255,116,0,3,
-55,70,0,
+55,63,0,
+17,53,1,
+51,255,255,209,0,3,
+55,64,0,
 17,216,0,
 51,255,255,110,0,3,
-28,71,0,
-17,28,2,6,65,0,66,0,67,0,68,0,69,0,70,0,
+55,65,0,
+17,250,1,
+51,255,255,116,0,3,
+55,66,0,
+17,3,2,
+51,255,255,116,0,3,
+55,67,0,
+17,12,2,
+51,255,255,116,0,3,
+28,68,0,
+17,21,2,9,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,
 51,255,255,11,0,
-0,72,0,
-51,255,255,28,0,4,
-0,73,0,
-51,255,255,116,0,4,
-55,74,0,
+0,69,0,
+51,255,255,28,0,8,
+0,70,0,
+51,255,255,116,0,8,
+55,71,0,
 17,147,0,
 51,255,255,63,0,3,
-55,75,0,
+55,72,0,
 17,238,0,
-51,72,0,3,
-55,76,0,
+51,69,0,3,
+55,73,0,
 17,250,0,
-51,73,0,3,
-55,77,0,
-17,72,1,
+51,70,0,3,
+55,74,0,
+17,41,1,
 51,255,255,209,0,3,
+55,75,0,
+17,53,1,
+51,255,255,209,0,3,
+55,76,0,
+17,216,0,
+51,255,255,110,0,3,
+55,77,0,
+17,250,1,
+51,255,255,116,0,3,
 55,78,0,
-17,116,1,
+17,3,2,
 51,255,255,116,0,3,
 55,79,0,
-17,126,1,
+17,12,2,
 51,255,255,116,0,3,
-55,80,0,
-17,216,0,
-51,255,255,110,0,3,
-55,81,0,
-17,233,1,
-51,255,255,116,0,3,
-55,82,0,
-17,242,1,
-51,255,255,116,0,3,
-55,83,0,
-17,251,1,
-51,255,255,116,0,3,
-28,84,0,
-17,52,2,10,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,
+28,80,0,
+17,45,2,9,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,
 51,255,255,11,0,
-0,85,0,
+0,81,0,
 51,255,255,28,0,4,
-0,86,0,
+0,82,0,
 51,255,255,116,0,4,
-55,87,0,
+55,83,0,
 17,147,0,
 51,255,255,63,0,3,
-55,88,0,
+55,84,0,
 17,238,0,
-51,85,0,3,
-55,89,0,
+51,81,0,3,
+55,85,0,
 17,250,0,
-51,86,0,3,
-55,90,0,
-17,24,1,
+51,82,0,3,
+55,86,0,
+17,89,1,
 51,255,255,209,0,3,
-55,91,0,
-17,36,1,
-51,255,255,209,0,3,
-55,92,0,
-17,186,1,
+55,87,0,
+17,101,1,
 51,255,255,116,0,3,
-55,93,0,
-17,199,1,
-51,255,255,116,0,3,
-55,94,0,
+55,88,0,
 17,216,0,
 51,255,255,110,0,3,
+28,89,0,
+17,69,2,6,83,0,84,0,85,0,86,0,87,0,88,0,
+51,255,255,11,0,
+0,90,0,
+51,255,255,28,0,8,
+0,91,0,
+51,255,255,116,0,8,
+55,92,0,
+17,147,0,
+51,255,255,63,0,3,
+55,93,0,
+17,238,0,
+51,90,0,3,
+55,94,0,
+17,250,0,
+51,91,0,3,
 55,95,0,
-17,75,2,
+17,89,1,
+51,255,255,209,0,3,
+55,96,0,
+17,101,1,
 51,255,255,116,0,3,
-28,96,0,
-17,83,2,9,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,
-51,255,255,11,0,
 55,97,0,
-17,108,2,
+17,216,0,
 51,255,255,110,0,3,
-55,98,0,
-17,118,2,
-51,255,255,11,0,3,
-55,99,0,
-17,122,2,
-51,255,255,11,0,3,
-28,100,0,
-17,126,2,3,97,0,98,0,99,0,
+28,98,0,
+17,93,2,6,92,0,93,0,94,0,95,0,96,0,97,0,
 51,255,255,11,0,
+0,99,0,
+51,255,255,28,0,4,
+0,100,0,
+51,255,255,116,0,4,
 55,101,0,
-17,108,2,
-51,255,255,110,0,3,
+17,147,0,
+51,255,255,63,0,3,
 55,102,0,
-17,135,2,
-51,255,255,110,0,3,
+17,238,0,
+51,99,0,3,
 55,103,0,
-17,140,2,
-51,255,255,110,0,3,
+17,250,0,
+51,100,0,3,
 55,104,0,
-17,145,2,
-51,255,255,110,0,3,
+17,89,1,
+51,255,255,209,0,3,
 55,105,0,
-17,150,2,
-51,255,255,11,0,3,
+17,133,1,
+51,255,255,116,0,3,
 55,106,0,
-17,157,2,
+17,143,1,
+51,255,255,116,0,3,
+55,107,0,
+17,216,0,
+51,255,255,110,0,3,
+55,108,0,
+17,250,1,
+51,255,255,116,0,3,
+55,109,0,
+17,3,2,
+51,255,255,116,0,3,
+55,110,0,
+17,12,2,
+51,255,255,116,0,3,
+28,111,0,
+17,117,2,10,101,0,102,0,103,0,104,0,105,0,106,0,107,0,108,0,109,0,110,0,
+51,255,255,11,0,
+0,112,0,
+51,255,255,28,0,8,
+0,113,0,
+51,255,255,116,0,8,
+55,114,0,
+17,147,0,
+51,255,255,63,0,3,
+55,115,0,
+17,238,0,
+51,112,0,3,
+55,116,0,
+17,250,0,
+51,113,0,3,
+55,117,0,
+17,89,1,
+51,255,255,209,0,3,
+55,118,0,
+17,133,1,
+51,255,255,116,0,3,
+55,119,0,
+17,143,1,
+51,255,255,116,0,3,
+55,120,0,
+17,216,0,
+51,255,255,110,0,3,
+55,121,0,
+17,250,1,
+51,255,255,116,0,3,
+55,122,0,
+17,3,2,
+51,255,255,116,0,3,
+55,123,0,
+17,12,2,
+51,255,255,116,0,3,
+28,124,0,
+17,140,2,10,114,0,115,0,116,0,117,0,118,0,119,0,120,0,121,0,122,0,123,0,
+51,255,255,11,0,
+0,125,0,
+51,255,255,28,0,4,
+0,126,0,
+51,255,255,116,0,4,
+55,127,0,
+17,147,0,
+51,255,255,63,0,3,
+55,128,0,
+17,238,0,
+51,125,0,3,
+55,129,0,
+17,250,0,
+51,126,0,3,
+55,130,0,
+17,41,1,
+51,255,255,209,0,3,
+55,131,0,
+17,53,1,
+51,255,255,209,0,3,
+55,132,0,
+17,203,1,
+51,255,255,116,0,3,
+55,133,0,
+17,216,1,
+51,255,255,116,0,3,
+55,134,0,
+17,216,0,
+51,255,255,110,0,3,
+55,135,0,
+17,163,2,
+51,255,255,116,0,3,
+28,136,0,
+17,171,2,9,127,0,128,0,129,0,130,0,131,0,132,0,133,0,134,0,135,0,
+51,255,255,11,0,
+0,137,0,
+51,255,255,28,0,8,
+0,138,0,
+51,255,255,116,0,8,
+55,139,0,
+17,147,0,
+51,255,255,63,0,3,
+55,140,0,
+17,238,0,
+51,137,0,3,
+55,141,0,
+17,250,0,
+51,138,0,3,
+55,142,0,
+17,41,1,
+51,255,255,209,0,3,
+55,143,0,
+17,53,1,
+51,255,255,209,0,3,
+55,144,0,
+17,203,1,
+51,255,255,116,0,3,
+55,145,0,
+17,216,1,
+51,255,255,116,0,3,
+55,146,0,
+17,216,0,
+51,255,255,110,0,3,
+55,147,0,
+17,163,2,
+51,255,255,116,0,3,
+28,148,0,
+17,196,2,9,139,0,140,0,141,0,142,0,143,0,144,0,145,0,146,0,147,0,
+51,255,255,11,0,
+55,149,0,
+17,221,2,
+51,255,255,110,0,3,
+55,150,0,
+17,231,2,
 51,255,255,11,0,3,
-28,107,0,
-17,164,2,6,101,0,102,0,103,0,104,0,105,0,106,0,
-51,255,255,11,0,18,0,
+55,151,0,
+17,235,2,
+51,255,255,11,0,3,
+28,152,0,
+17,239,2,3,149,0,150,0,151,0,
+51,255,255,11,0,
+55,153,0,
+17,221,2,
+51,255,255,110,0,3,
+55,154,0,
+17,248,2,
+51,255,255,110,0,3,
+55,155,0,
+17,253,2,
+51,255,255,110,0,3,
+55,156,0,
+17,2,3,
+51,255,255,110,0,3,
+55,157,0,
+17,7,3,
+51,255,255,11,0,3,
+55,158,0,
+17,14,3,
+51,255,255,11,0,3,
+28,159,0,
+17,21,3,6,153,0,154,0,155,0,156,0,157,0,158,0,
+51,255,255,11,0,23,0,
 27,0,
+33,0,
+55,0,
+37,0,
 49,0,
-31,0,
-43,0,
-35,0,
-40,0,
+41,0,
+46,0,
 11,0,
 21,0,
-99,0,
-106,0,
+151,0,
+158,0,
 18,0,
-95,0,
+135,0,
+147,0,
 0,0,
-61,0,
+67,0,
+79,0,
 5,0,
-70,0,
+88,0,
+97,0,
 2,0,
-83,0,
+110,0,
+123,0,
 20,
 29,1,0,
 2,
@@ -506,13 +662,13 @@
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,128,63,1,
+51,255,255,37,3,0,0,128,63,1,
 29,3,0,
 2,
 52,1,0,0,0,0,1,
@@ -528,48 +684,48 @@
 29,12,0,
 2,
 52,1,4,0,
-55,108,0,
+55,160,0,
 38,
-16,4,185,2,
+16,4,42,3,
 51,255,255,110,0,2,
-55,109,0,
+55,161,0,
 38,
-16,4,192,2,
+16,4,49,3,
 51,255,255,110,0,2,
-55,110,0,
+55,162,0,
 38,
-16,4,200,2,
+16,4,57,3,
 51,255,255,110,0,2,
-55,111,0,
+55,163,0,
 38,
-16,4,214,2,
+16,4,71,3,
 51,255,255,110,0,2,4,0,
 0,0,
 3,0,
 2,0,
 1,0,4,
-56,108,0,
+56,160,0,
 51,255,255,110,0,0,
 36,
 51,255,255,110,0,0,0,0,0,
-56,109,0,
+56,161,0,
 51,255,255,110,0,0,
 36,
 51,255,255,110,0,1,0,0,0,
-56,110,0,
+56,162,0,
 51,255,255,110,0,0,
 36,
 51,255,255,110,0,2,0,0,0,
 32,0,
 1,
 57,7,0,0,16,
-57,108,0,0,
+57,160,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 1,
 27,
-51,255,255,116,0,255,255,229,2,3,
+51,255,255,116,0,255,255,86,3,3,
 57,8,0,0,
 57,9,0,0,
 57,10,0,0,3,
@@ -577,14 +733,14 @@
 32,0,
 1,
 57,7,0,0,16,
-57,109,0,0,
+57,161,0,0,
 2,
 52,1,1,0,
-55,112,0,
-17,235,2,
+55,164,0,
+17,92,3,
 51,255,255,116,0,2,1,0,
 0,0,2,
-56,112,0,
+56,164,0,
 51,255,255,116,0,0,
 1,
 57,10,0,0,1,
@@ -593,63 +749,63 @@
 1,
 1,
 27,
-51,255,255,116,0,255,255,242,2,2,
+51,255,255,116,0,255,255,99,3,2,
 1,
 57,8,0,0,1,
 57,9,0,0,
-57,112,0,0,0,
+57,164,0,0,0,
 57,9,0,0,3,
 57,11,0,0,1,
 32,0,
 1,
 57,7,0,0,16,
-57,110,0,0,
+57,162,0,0,
 2,
 52,1,3,0,
-55,113,0,
-17,235,2,
+55,165,0,
+17,92,3,
 51,255,255,116,0,2,
-55,114,0,
-17,246,2,
+55,166,0,
+17,103,3,
 51,255,255,116,0,2,
-55,115,0,
-17,254,2,
+55,167,0,
+17,111,3,
 51,255,255,116,0,2,3,0,
 0,0,
 1,0,
 2,0,4,
-56,113,0,
+56,165,0,
 51,255,255,116,0,0,
 1,
 57,10,0,0,1,
 57,9,0,0,
-56,114,0,
+56,166,0,
 51,255,255,116,0,0,
 1,
 25,
 51,255,255,116,0,0,0,0,64,2,
-57,113,0,0,
-56,115,0,
+57,165,0,0,
+56,167,0,
 51,255,255,116,0,0,
 27,
-51,255,255,116,0,255,255,242,2,2,
+51,255,255,116,0,255,255,99,3,2,
 1,
 57,8,0,0,1,
 57,9,0,0,
-57,114,0,0,
+57,166,0,0,
 44,
 1,
 1,
 27,
-51,255,255,116,0,255,255,2,3,3,
-57,115,0,0,
+51,255,255,116,0,255,255,115,3,3,
+57,167,0,0,
 1,
-57,114,0,0,1,
-57,115,0,0,
+57,166,0,0,1,
+57,167,0,0,
 27,
-51,255,255,116,0,255,255,6,3,2,
-57,113,0,0,
-57,115,0,0,0,
+51,255,255,116,0,255,255,119,3,2,
+57,165,0,0,
+57,167,0,0,0,
 57,9,0,0,3,
 57,11,0,0,1,
 2,
@@ -657,7 +813,7 @@
 44,
 1,
 27,
-51,255,255,116,0,255,255,229,2,3,
+51,255,255,116,0,255,255,86,3,3,
 57,8,0,0,
 57,9,0,0,
 57,10,0,0,3,
@@ -665,20 +821,20 @@
 29,19,0,
 2,
 52,1,2,0,
-55,116,0,
-17,11,3,
+55,168,0,
+17,124,3,
 51,255,255,28,0,2,
-55,117,0,
-17,23,3,
+55,169,0,
+17,136,3,
 51,255,255,209,0,2,2,0,
 1,0,
 0,0,3,
-56,116,0,
+56,168,0,
 51,255,255,28,0,0,
 1,
 57,13,0,0,2,
-57,255,255,30,3,0,
-56,117,0,
+57,255,255,143,3,0,
+56,169,0,
 51,255,255,209,0,0,
 8,
 51,255,255,209,0,2,
@@ -686,7 +842,7 @@
 51,255,255,116,0,12,0,5,
 57,15,0,0,
 50,
-57,116,0,0,1,0,
+57,168,0,0,1,0,
 50,
 57,14,0,0,1,0,
 50,
@@ -698,7 +854,7 @@
 51,255,255,116,0,12,0,5,
 57,16,0,0,
 50,
-57,116,0,0,1,1,
+57,168,0,0,1,1,
 50,
 57,14,0,0,1,1,
 50,
@@ -707,25 +863,25 @@
 51,255,255,116,0,1,
 57,18,0,0,
 44,
-57,117,0,0,1,
+57,169,0,0,1,
 29,22,0,
 2,
 52,1,4,0,
-55,118,0,
+55,170,0,
 38,
-16,4,43,3,
+16,4,156,3,
 51,255,255,110,0,2,
-55,119,0,
+55,171,0,
 38,
-16,4,58,3,
+16,4,171,3,
 51,255,255,110,0,2,
-55,120,0,
+55,172,0,
 38,
-16,4,74,3,
+16,4,187,3,
 51,255,255,110,0,2,
-55,121,0,
+55,173,0,
 38,
-16,4,90,3,
+16,4,203,3,
 51,255,255,110,0,2,4,0,
 0,0,
 3,0,
@@ -733,10 +889,10 @@
 1,0,2,
 49,0,
 52,1,4,0,
-51,118,0,
-51,119,0,
-51,120,0,
-51,121,0,4,0,
+51,170,0,
+51,171,0,
+51,172,0,
+51,173,0,4,0,
 0,0,
 3,0,
 2,0,
@@ -749,7 +905,7 @@
 50,
 57,21,0,1,1,0,15,
 27,
-51,255,255,116,0,255,255,229,2,3,
+51,255,255,116,0,255,255,86,3,3,
 50,
 57,21,0,0,1,0,
 25,
@@ -764,17 +920,17 @@
 50,
 57,21,0,1,1,0,15,
 27,
-51,255,255,116,0,255,255,105,3,1,
+51,255,255,116,0,255,255,218,3,1,
 50,
 57,21,0,0,1,0,
 4,0,0,2,0,0,0,
 2,
 52,1,1,0,
-55,122,0,
-17,111,3,
+55,174,0,
+17,224,3,
 51,255,255,116,0,2,1,0,
 0,0,4,
-56,122,0,
+56,174,0,
 51,255,255,116,0,0,
 1,
 50,
@@ -787,14 +943,14 @@
 57,21,0,1,1,0,15,
 1,
 1,
-57,122,0,0,1,
+57,174,0,0,1,
 1,
 25,
 51,255,255,116,0,0,0,0,64,2,
 27,
-51,255,255,116,0,255,255,115,3,1,
+51,255,255,116,0,255,255,228,3,1,
 1,
-57,122,0,0,2,
+57,174,0,0,2,
 25,
 51,255,255,116,0,0,0,0,63,1,
 25,
@@ -804,7 +960,7 @@
 50,
 57,21,0,1,1,0,15,
 27,
-51,255,255,116,0,255,255,121,3,1,
+51,255,255,116,0,255,255,234,3,1,
 50,
 57,21,0,0,1,0,
 4,1,0,3,0,0,0,
@@ -850,7 +1006,7 @@
 13,
 51,255,255,11,0,1,
 25,
-51,255,255,180,2,0,0,0,0,1,
+51,255,255,37,3,0,0,0,0,1,
 32,0,
 1,
 50,
@@ -858,7 +1014,7 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,0,0,0,0,
+51,255,255,238,3,0,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
@@ -867,7 +1023,7 @@
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,0,0,0,0,1,
+51,255,255,238,3,0,0,0,0,1,
 32,0,
 1,
 50,
@@ -875,22 +1031,22 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,1,0,0,0,
+51,255,255,238,3,1,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 9,
 51,255,255,11,0,1,
 27,
-51,255,255,28,0,255,255,2,3,3,
+51,255,255,28,0,255,255,115,3,3,
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,0,0,0,0,
+51,255,255,238,3,0,0,0,0,
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,1,0,0,0,
+51,255,255,238,3,1,0,0,0,
 1,
 1,
 50,
@@ -898,16 +1054,16 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,0,0,0,0,3,
+51,255,255,238,3,0,0,0,0,3,
 1,
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,1,0,0,0,1,
+51,255,255,238,3,1,0,0,0,1,
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,0,0,0,0,1,
+51,255,255,238,3,0,0,0,0,1,
 32,0,
 1,
 50,
@@ -915,22 +1071,22 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,2,0,0,0,
+51,255,255,238,3,2,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 9,
 51,255,255,11,0,1,
 27,
-51,255,255,28,0,255,255,2,3,3,
+51,255,255,28,0,255,255,115,3,3,
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,1,0,0,0,
+51,255,255,238,3,1,0,0,0,
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,2,0,0,0,
+51,255,255,238,3,2,0,0,0,
 1,
 1,
 50,
@@ -938,16 +1094,16 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,1,0,0,0,3,
+51,255,255,238,3,1,0,0,0,3,
 1,
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,2,0,0,0,1,
+51,255,255,238,3,2,0,0,0,1,
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,1,0,0,0,1,
+51,255,255,238,3,1,0,0,0,1,
 32,0,
 1,
 50,
@@ -955,22 +1111,22 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,3,0,0,0,
+51,255,255,238,3,3,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 9,
 51,255,255,11,0,1,
 27,
-51,255,255,28,0,255,255,2,3,3,
+51,255,255,28,0,255,255,115,3,3,
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,2,0,0,0,
+51,255,255,238,3,2,0,0,0,
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,3,0,0,0,
+51,255,255,238,3,3,0,0,0,
 1,
 1,
 50,
@@ -978,16 +1134,16 @@
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,2,0,0,0,3,
+51,255,255,238,3,2,0,0,0,3,
 1,
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,3,0,0,0,1,
+51,255,255,238,3,3,0,0,0,1,
 33,
 57,26,0,0,
 36,
-51,255,255,125,3,2,0,0,0,1,
+51,255,255,238,3,2,0,0,0,1,
 2,
 52,1,0,0,0,0,1,
 44,
@@ -996,116 +1152,450 @@
 33,
 57,25,0,0,
 36,
-51,255,255,125,3,3,0,0,0,1,1,
-29,32,0,
+51,255,255,238,3,3,0,0,0,1,1,
+29,34,0,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,1,18,
+25,
+51,255,255,116,0,0,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+13,
+51,255,255,11,0,1,
+25,
+51,255,255,37,3,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,4,0,0,0,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,2,0,0,0,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,20,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,0,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,1,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,0,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,1,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,0,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,1,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,0,0,0,0,1,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,1,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,2,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,1,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,2,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,1,0,0,0,1,1,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,3,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,2,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,3,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,2,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,3,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,2,0,0,0,1,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,3,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,4,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,3,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,4,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,3,0,0,0,1,1,1,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,6,0,0,0,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,5,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,4,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,5,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,4,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,5,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,4,0,0,0,1,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,5,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,6,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,5,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,6,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,5,0,0,0,1,1,
+2,
+52,1,0,0,0,0,1,
+32,0,
+1,
+50,
+57,33,0,0,1,0,18,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,7,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+27,
+51,255,255,28,0,255,255,115,3,3,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,6,0,0,0,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,7,0,0,0,
+1,
+1,
+50,
+57,33,0,0,1,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,6,0,0,0,3,
+1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,7,0,0,0,1,
+33,
+57,32,0,0,
+36,
+51,255,255,238,3,6,0,0,0,1,
+2,
+52,1,0,0,0,0,1,
+44,
+9,
+51,255,255,11,0,1,
+33,
+57,31,0,0,
+36,
+51,255,255,238,3,7,0,0,0,1,1,1,1,
+29,38,0,
 2,
 52,1,2,0,
-55,123,0,
-17,137,3,
+55,175,0,
+17,250,3,
 51,255,255,209,0,2,
-55,124,0,
+55,176,0,
 17,225,0,
 51,255,255,116,0,2,2,0,
 0,0,
 1,0,4,
 22,
 1,
-57,31,0,2,23,
-57,29,0,0,
-56,123,0,
+57,37,0,2,23,
+57,35,0,0,
+56,175,0,
 51,255,255,209,0,0,
 1,
-57,30,0,0,1,
-57,29,0,0,
-56,124,0,
+57,36,0,0,1,
+57,35,0,0,
+56,176,0,
 51,255,255,116,0,0,
 1,
 27,
-51,255,255,116,0,255,255,143,3,2,
-57,31,0,0,
-57,123,0,0,3,
+51,255,255,116,0,255,255,0,4,2,
+57,37,0,0,
+57,175,0,0,3,
 27,
-51,255,255,116,0,255,255,143,3,2,
-57,123,0,0,
-57,123,0,0,
+51,255,255,116,0,255,255,0,4,2,
+57,175,0,0,
+57,175,0,0,
 44,
 8,
 51,255,255,209,0,2,
-57,124,0,0,
+57,176,0,0,
 25,
 51,255,255,116,0,0,0,128,63,1,
-29,36,0,
+29,42,0,
 2,
 52,1,1,0,
-55,125,0,
+55,177,0,
 17,225,0,
 51,255,255,116,0,2,1,0,
 0,0,2,
-56,125,0,
+56,177,0,
 51,255,255,116,0,0,
 1,
 27,
-51,255,255,116,0,255,255,147,3,2,
-57,35,0,0,
-57,33,0,0,3,
-57,34,0,0,
+51,255,255,116,0,255,255,4,4,2,
+57,41,0,0,
+57,39,0,0,3,
+57,40,0,0,
 44,
 8,
 51,255,255,209,0,2,
-57,125,0,0,
+57,177,0,0,
 25,
 51,255,255,116,0,0,0,128,63,1,
-29,41,0,
+29,47,0,
 2,
 52,1,2,0,
-55,126,0,
-17,156,3,
+55,178,0,
+17,13,4,
 51,255,255,116,0,2,
-55,127,0,
+55,179,0,
 17,225,0,
 51,255,255,116,0,2,2,0,
 0,0,
 1,0,4,
 22,
 1,
-57,40,0,2,23,
-57,37,0,0,
-56,126,0,
+57,46,0,2,23,
+57,43,0,0,
+56,178,0,
 51,255,255,116,0,0,
 27,
-51,255,255,116,0,255,255,162,3,2,
+51,255,255,116,0,255,255,19,4,2,
 42,1,
 50,
-57,40,0,0,1,1,
+57,46,0,0,1,1,
 42,1,
 50,
-57,40,0,0,1,0,
-56,127,0,
+57,46,0,0,1,0,
+56,179,0,
 51,255,255,116,0,0,
 1,
 1,
 1,
 1,
-57,126,0,0,2,
+57,178,0,0,2,
 25,
 51,255,255,116,0,131,249,34,62,0,
 25,
 51,255,255,116,0,0,0,0,63,0,
-57,38,0,0,2,
-57,39,0,0,
+57,44,0,0,2,
+57,45,0,0,
 44,
 8,
 51,255,255,209,0,2,
-57,127,0,0,
+57,179,0,0,
 25,
 51,255,255,116,0,0,0,128,63,1,
-29,44,0,
+29,50,0,
 2,
 52,1,0,0,0,0,1,
 44,
 1,
 8,
-51,255,255,177,1,9,
+51,255,255,194,1,9,
 25,
 51,255,255,116,0,0,0,0,0,
 25,
@@ -1125,107 +1615,107 @@
 25,
 51,255,255,116,0,0,0,128,63,2,
 27,
-51,255,255,177,1,255,255,167,3,1,
+51,255,255,194,1,255,255,24,4,1,
 8,
-51,255,255,177,1,9,
+51,255,255,194,1,9,
 1,
 50,
-57,43,0,0,1,1,1,
+57,49,0,0,1,1,1,
 50,
-57,42,0,0,1,1,
+57,48,0,0,1,1,
 1,
 50,
-57,42,0,0,1,0,1,
+57,48,0,0,1,0,1,
 50,
-57,43,0,0,1,0,
+57,49,0,0,1,0,
 25,
 51,255,255,116,0,0,0,0,0,
 1,
 50,
-57,43,0,0,1,0,1,
+57,49,0,0,1,0,1,
 50,
-57,42,0,0,1,0,
+57,48,0,0,1,0,
 1,
 50,
-57,43,0,0,1,1,1,
+57,49,0,0,1,1,1,
 50,
-57,42,0,0,1,1,
+57,48,0,0,1,1,
 25,
 51,255,255,116,0,0,0,0,0,
 50,
-57,42,0,0,1,0,
+57,48,0,0,1,0,
 50,
-57,42,0,0,1,1,
+57,48,0,0,1,1,
 25,
 51,255,255,116,0,0,0,128,63,1,
-29,50,0,
+29,56,0,
 2,
 52,1,5,0,
-55,128,0,
+55,180,0,
 38,
-16,4,175,3,
+16,4,32,4,
 51,255,255,116,0,2,
-55,129,0,
-17,195,3,
+55,181,0,
+17,52,4,
 51,255,255,116,0,2,
-55,130,0,
-17,203,3,
+55,182,0,
+17,60,4,
 51,255,255,116,0,2,
-55,131,0,
-17,211,3,
-51,255,255,218,3,2,
-55,132,0,
-17,223,3,
-51,255,255,218,3,2,5,0,
+55,183,0,
+17,68,4,
+51,255,255,75,4,2,
+55,184,0,
+17,80,4,
+51,255,255,75,4,2,5,0,
 0,0,
 1,0,
 2,0,
 3,0,
 4,0,6,
-56,128,0,
+56,180,0,
 51,255,255,116,0,0,
 25,
 51,255,255,116,0,0,0,128,57,
-56,129,0,
+56,181,0,
 51,255,255,116,0,0,
 27,
-51,255,255,116,0,255,255,147,3,2,
-57,45,0,0,
-57,46,0,0,
-56,130,0,
+51,255,255,116,0,255,255,4,4,2,
+57,51,0,0,
+57,52,0,0,
+56,182,0,
 51,255,255,116,0,0,
 1,
-57,48,0,0,1,
-57,47,0,0,
-56,131,0,
-51,255,255,218,3,0,
+57,54,0,0,1,
+57,53,0,0,
+56,183,0,
+51,255,255,75,4,0,
 1,
-57,129,0,0,18,
-57,128,0,0,
-56,132,0,
-51,255,255,218,3,0,
+57,181,0,0,18,
+57,180,0,0,
+56,184,0,
+51,255,255,75,4,0,
 1,
 27,
-51,255,255,116,0,255,255,121,3,1,
-57,130,0,0,18,
-57,128,0,0,
+51,255,255,116,0,255,255,234,3,1,
+57,182,0,0,18,
+57,180,0,0,
 32,0,
-57,131,0,0,
+57,183,0,0,
 2,
 52,1,5,0,
-55,133,0,
-17,229,3,
+55,185,0,
+17,86,4,
 51,255,255,116,0,2,
-55,134,0,
-17,235,3,
+55,186,0,
+17,92,4,
 51,255,255,116,0,2,
-55,135,0,
-17,245,3,
+55,187,0,
+17,102,4,
 51,255,255,116,0,2,
-55,136,0,
-17,250,3,
+55,188,0,
+17,107,4,
 51,255,255,209,0,2,
-55,137,0,
+55,189,0,
 17,225,0,
 51,255,255,116,0,2,5,0,
 2,0,
@@ -1234,7 +1724,7 @@
 1,0,
 4,0,7,
 32,0,
-57,132,0,0,
+57,184,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
@@ -1245,61 +1735,61 @@
 25,
 51,255,255,116,0,0,0,128,191,1,
 58,
-56,133,0,
+56,185,0,
 51,255,255,116,0,0,
 1,
 25,
 51,255,255,116,0,0,0,128,63,3,
-57,130,0,0,
-56,134,0,
+57,182,0,0,
+56,186,0,
 51,255,255,116,0,0,
 27,
-51,255,255,116,0,255,255,253,3,1,
-57,130,0,0,
-56,135,0,
+51,255,255,116,0,255,255,110,4,1,
+57,182,0,0,
+56,187,0,
 51,255,255,116,0,0,
 1,
-57,47,0,0,3,
-57,130,0,0,
-56,136,0,
+57,53,0,0,3,
+57,182,0,0,
+56,188,0,
 51,255,255,209,0,0,
 1,
 1,
-57,49,0,0,1,
-57,45,0,0,2,
-57,133,0,0,
-56,137,0,
+57,55,0,0,1,
+57,51,0,0,2,
+57,185,0,0,
+56,189,0,
 51,255,255,116,0,0,
 1,
 1,
 27,
-51,255,255,116,0,255,255,235,2,1,
-57,136,0,0,2,
-57,134,0,0,1,
-57,135,0,0,
+51,255,255,116,0,255,255,92,3,1,
+57,188,0,0,2,
+57,186,0,0,1,
+57,187,0,0,
 44,
 8,
 51,255,255,209,0,2,
-57,137,0,0,
+57,189,0,0,
 25,
 51,255,255,116,0,0,0,128,63,1,
 32,0,
-57,132,0,0,
+57,184,0,0,
 2,
 52,1,5,0,
-55,138,0,
-17,2,4,
-51,255,255,177,1,2,
-55,139,0,
-17,12,4,
+55,190,0,
+17,115,4,
+51,255,255,194,1,2,
+55,191,0,
+17,125,4,
 51,255,255,116,0,2,
-55,140,0,
-17,14,4,
+55,192,0,
+17,127,4,
 51,255,255,116,0,2,
-55,141,0,
-17,250,3,
+55,193,0,
+17,107,4,
 51,255,255,209,0,2,
-55,142,0,
+55,194,0,
 17,225,0,
 51,255,255,116,0,2,5,0,
 3,0,
@@ -1307,44 +1797,44 @@
 2,0,
 4,0,
 0,0,8,
-56,138,0,
-51,255,255,177,1,0,
+56,190,0,
+51,255,255,194,1,0,
 27,
-51,255,255,177,1,44,0,2,
-57,45,0,0,
-57,46,0,0,
-56,139,0,
+51,255,255,194,1,50,0,2,
+57,51,0,0,
+57,52,0,0,
+56,191,0,
 51,255,255,116,0,0,
 1,
-57,47,0,0,3,
-57,129,0,0,
-56,140,0,
+57,53,0,0,3,
+57,181,0,0,
+56,192,0,
 51,255,255,116,0,0,
 1,
-57,139,0,0,2,
-57,139,0,0,
-56,141,0,
+57,191,0,0,2,
+57,191,0,0,
+56,193,0,
 51,255,255,209,0,0,
 50,
 1,
-57,138,0,0,2,
+57,190,0,0,2,
 8,
-51,255,255,18,4,2,
-57,49,0,0,
+51,255,255,131,4,2,
+57,55,0,0,
 25,
 51,255,255,116,0,0,0,128,63,2,0,1,
-56,142,0,
+56,194,0,
 51,255,255,116,0,0,
 1,
-57,140,0,0,1,
+57,192,0,0,1,
 1,
 50,
-57,141,0,0,1,1,2,
+57,193,0,0,1,1,2,
 50,
-57,141,0,0,1,1,
+57,193,0,0,1,1,
 32,0,
 1,
-57,142,0,0,18,
+57,194,0,0,18,
 25,
 51,255,255,116,0,0,0,0,0,
 2,
@@ -1359,61 +1849,61 @@
 58,
 22,
 1,
-57,142,0,1,15,
+57,194,0,1,15,
 1,
 50,
-57,141,0,0,1,0,0,
+57,193,0,0,1,0,0,
 27,
-51,255,255,116,0,255,255,25,4,1,
-57,142,0,0,
+51,255,255,116,0,255,255,138,4,1,
+57,194,0,0,
 44,
 8,
 51,255,255,209,0,2,
-57,142,0,0,
+57,194,0,0,
 25,
 51,255,255,116,0,0,0,128,63,1,
 2,
 52,1,14,0,
-55,143,0,
+55,195,0,
 17,114,0,
 51,255,255,116,0,2,
-55,144,0,
-17,30,4,
-51,255,255,218,3,2,
-55,145,0,
-17,40,4,
+55,196,0,
+17,143,4,
+51,255,255,75,4,2,
+55,197,0,
+17,153,4,
 51,255,255,209,0,2,
-55,146,0,
-17,2,4,
-51,255,255,177,1,2,
-55,147,0,
-17,43,4,
+55,198,0,
+17,115,4,
+51,255,255,194,1,2,
+55,199,0,
+17,156,4,
 51,255,255,116,0,2,
-55,148,0,
-17,50,4,
+55,200,0,
+17,163,4,
 51,255,255,116,0,2,
-55,149,0,
-17,57,4,
+55,201,0,
+17,170,4,
 51,255,255,116,0,2,
-55,150,0,
-17,60,4,
-51,255,255,218,3,2,
-55,151,0,
-17,250,3,
+55,202,0,
+17,173,4,
+51,255,255,75,4,2,
+55,203,0,
+17,107,4,
 51,255,255,209,0,2,
-55,152,0,
-17,76,4,
+55,204,0,
+17,189,4,
 51,255,255,116,0,2,
-55,153,0,
-17,82,4,
+55,205,0,
+17,195,4,
 51,255,255,116,0,2,
-55,154,0,
-17,94,4,
-51,255,255,218,3,2,
-55,155,0,
-17,108,4,
+55,206,0,
+17,207,4,
+51,255,255,75,4,2,
+55,207,0,
+17,221,4,
 51,255,255,116,0,2,
-55,156,0,
+55,208,0,
 17,225,0,
 51,255,255,116,0,2,14,0,
 2,0,
@@ -1430,150 +1920,150 @@
 13,0,
 3,0,
 12,0,21,
-56,143,0,
+56,195,0,
 51,255,255,116,0,0,
 1,
-57,47,0,0,3,
+57,53,0,0,3,
 1,
-57,47,0,0,1,
-57,48,0,0,
-56,144,0,
-51,255,255,218,3,0,
+57,53,0,0,1,
+57,54,0,0,
+56,196,0,
+51,255,255,75,4,0,
 1,
 27,
-51,255,255,116,0,255,255,121,3,1,
+51,255,255,116,0,255,255,234,3,1,
 1,
-57,143,0,0,1,
+57,195,0,0,1,
 25,
 51,255,255,116,0,0,0,128,63,18,
-57,128,0,0,
+57,180,0,0,
 32,0,
-57,144,0,0,
+57,196,0,0,
 2,
 52,1,1,0,
-55,157,0,
-17,112,4,
+55,209,0,
+17,225,4,
 51,255,255,209,0,2,1,0,
 0,0,4,
-56,157,0,
+56,209,0,
 51,255,255,209,0,0,
-57,45,0,0,
+57,51,0,0,
 22,
 1,
-57,45,0,1,15,
-57,46,0,0,
+57,51,0,1,15,
+57,52,0,0,
 22,
 1,
-57,46,0,1,15,
-57,157,0,0,
+57,52,0,1,15,
+57,209,0,0,
 22,
 1,
-57,143,0,1,15,
+57,195,0,1,15,
 25,
 51,255,255,116,0,0,0,0,0,1,
 58,
-56,145,0,
+56,197,0,
 51,255,255,209,0,0,
 1,
 1,
-57,45,0,0,2,
+57,51,0,0,2,
 1,
 25,
 51,255,255,116,0,0,0,128,63,1,
-57,143,0,0,0,
+57,195,0,0,0,
 1,
-57,46,0,0,2,
-57,143,0,0,
-56,146,0,
-51,255,255,177,1,0,
+57,52,0,0,2,
+57,195,0,0,
+56,198,0,
+51,255,255,194,1,0,
 27,
-51,255,255,177,1,44,0,2,
-57,145,0,0,
-57,46,0,0,
-56,147,0,
+51,255,255,194,1,50,0,2,
+57,197,0,0,
+57,52,0,0,
+56,199,0,
 51,255,255,116,0,0,
 27,
-51,255,255,116,0,255,255,121,3,1,
+51,255,255,116,0,255,255,234,3,1,
 1,
 25,
 51,255,255,116,0,0,0,128,63,1,
-57,143,0,0,
-56,148,0,
+57,195,0,0,
+56,200,0,
 51,255,255,116,0,0,
-57,147,0,0,
-56,149,0,
+57,199,0,0,
+56,201,0,
 51,255,255,116,0,0,
 1,
 27,
-51,255,255,116,0,255,255,121,3,1,
+51,255,255,116,0,255,255,234,3,1,
 1,
-57,48,0,0,1,
-57,47,0,0,3,
-57,129,0,0,
-56,150,0,
-51,255,255,218,3,0,
+57,54,0,0,1,
+57,53,0,0,3,
+57,181,0,0,
+56,202,0,
+51,255,255,75,4,0,
 1,
 27,
-51,255,255,116,0,255,255,121,3,1,
+51,255,255,116,0,255,255,234,3,1,
 1,
-57,149,0,0,1,
+57,201,0,0,1,
 25,
 51,255,255,116,0,0,0,128,63,18,
-57,128,0,0,
+57,180,0,0,
 32,0,
-57,150,0,0,
+57,202,0,0,
 2,
 52,1,0,0,0,0,2,
 22,
 1,
-57,147,0,2,24,
+57,199,0,2,24,
 25,
 51,255,255,116,0,0,0,0,63,
 22,
 1,
-57,148,0,2,24,
+57,200,0,2,24,
 25,
 51,255,255,116,0,0,0,0,63,1,
 2,
 52,1,0,0,0,0,2,
 22,
 1,
-57,147,0,2,24,
+57,199,0,2,24,
 1,
-57,149,0,0,3,
+57,201,0,0,3,
 1,
 1,
-57,149,0,0,2,
-57,149,0,0,1,
+57,201,0,0,2,
+57,201,0,0,1,
 25,
 51,255,255,116,0,0,0,128,63,
 22,
 1,
-57,148,0,2,25,
+57,200,0,2,25,
 27,
-51,255,255,116,0,255,255,25,4,1,
+51,255,255,116,0,255,255,138,4,1,
 27,
-51,255,255,116,0,255,255,121,3,1,
+51,255,255,116,0,255,255,234,3,1,
 1,
 1,
-57,149,0,0,2,
-57,149,0,0,1,
+57,201,0,0,2,
+57,201,0,0,1,
 25,
 51,255,255,116,0,0,0,128,63,1,
 22,
 1,
-57,146,0,1,15,
+57,198,0,1,15,
 1,
 8,
-51,255,255,177,1,9,
-57,147,0,0,
+51,255,255,194,1,9,
+57,199,0,0,
 25,
 51,255,255,116,0,0,0,0,0,
 25,
 51,255,255,116,0,0,0,0,0,
 25,
 51,255,255,116,0,0,0,0,0,
-57,148,0,0,
+57,200,0,0,
 25,
 51,255,255,116,0,0,0,0,0,
 25,
@@ -1582,140 +2072,140 @@
 51,255,255,116,0,0,0,0,0,
 25,
 51,255,255,116,0,0,0,128,63,2,
-57,146,0,0,
-56,151,0,
+57,198,0,0,
+56,203,0,
 51,255,255,209,0,0,
 50,
 1,
-57,146,0,0,2,
+57,198,0,0,2,
 8,
-51,255,255,18,4,2,
-57,49,0,0,
+51,255,255,131,4,2,
+57,55,0,0,
 25,
 51,255,255,116,0,0,0,128,63,2,0,1,
-56,152,0,
+56,204,0,
 51,255,255,116,0,0,
 1,
 25,
 51,255,255,116,0,0,0,128,63,3,
-57,149,0,0,
-56,153,0,
+57,201,0,0,
+56,205,0,
 51,255,255,116,0,0,
 27,
-51,255,255,116,0,255,255,253,3,1,
+51,255,255,116,0,255,255,110,4,1,
 1,
 25,
 51,255,255,116,0,0,0,128,63,1,
-57,143,0,0,
-56,154,0,
-51,255,255,218,3,0,
+57,195,0,0,
+56,206,0,
+51,255,255,75,4,0,
 1,
 42,7,
-57,150,0,0,8,
+57,202,0,0,8,
 1,
-57,149,0,0,19,
+57,201,0,0,19,
 25,
 51,255,255,116,0,0,0,128,63,
-56,155,0,
+56,207,0,
 51,255,255,116,0,0,
 25,
 51,255,255,116,0,0,0,128,191,
 32,0,
-57,150,0,0,
+57,202,0,0,
 2,
 52,1,0,0,0,0,1,
 22,
 1,
-57,155,0,1,15,
+57,207,0,1,15,
 1,
 27,
-51,255,255,116,0,255,255,143,3,2,
-57,151,0,0,
-57,151,0,0,3,
+51,255,255,116,0,255,255,0,4,2,
+57,203,0,0,
+57,203,0,0,3,
 50,
-57,151,0,0,1,0,1,
+57,203,0,0,1,0,1,
 32,0,
-57,154,0,0,
+57,206,0,0,
 2,
 52,1,0,0,0,0,1,
 22,
 1,
-57,155,0,1,15,
+57,207,0,1,15,
 1,
 27,
-51,255,255,116,0,255,255,235,2,1,
-57,151,0,0,1,
+51,255,255,116,0,255,255,92,3,1,
+57,203,0,0,1,
 1,
 50,
-57,151,0,0,1,0,2,
-57,152,0,0,1,
+57,203,0,0,1,0,2,
+57,204,0,0,1,
 2,
 52,1,1,0,
-55,158,0,
-17,118,4,
+55,210,0,
+17,231,4,
 51,255,255,116,0,2,1,0,
 0,0,2,
-56,158,0,
+56,210,0,
 51,255,255,116,0,0,
 1,
 1,
 50,
-57,151,0,0,1,0,2,
+57,203,0,0,1,0,2,
 50,
-57,151,0,0,1,0,1,
+57,203,0,0,1,0,1,
 1,
 50,
-57,151,0,0,1,1,2,
+57,203,0,0,1,1,2,
 50,
-57,151,0,0,1,1,
+57,203,0,0,1,1,
 32,0,
 1,
-57,158,0,0,21,
+57,210,0,0,21,
 25,
 51,255,255,116,0,0,0,0,0,
 2,
 52,1,0,0,0,0,1,
 32,0,
 1,
-57,144,0,0,9,
+57,196,0,0,9,
 1,
-57,153,0,0,18,
+57,205,0,0,18,
 25,
 51,255,255,116,0,0,0,0,0,
 2,
 52,1,0,0,0,0,1,
 22,
 1,
-57,155,0,1,15,
+57,207,0,1,15,
 1,
 42,1,
 27,
-51,255,255,116,0,255,255,25,4,1,
-57,158,0,0,1,
+51,255,255,116,0,255,255,138,4,1,
+57,210,0,0,1,
 1,
 50,
-57,151,0,0,1,0,2,
-57,152,0,0,1,
+57,203,0,0,1,0,2,
+57,204,0,0,1,
 2,
 52,1,0,0,0,0,1,
 22,
 1,
-57,155,0,1,15,
+57,207,0,1,15,
 1,
 27,
-51,255,255,116,0,255,255,25,4,1,
-57,158,0,0,1,
+51,255,255,116,0,255,255,138,4,1,
+57,210,0,0,1,
 1,
 50,
-57,151,0,0,1,0,2,
-57,152,0,0,1,1,
+57,203,0,0,1,0,2,
+57,204,0,0,1,1,
 58,1,
 32,0,
 1,
 42,7,
-57,154,0,0,8,
+57,206,0,0,8,
 1,
-57,155,0,0,18,
+57,207,0,0,18,
 25,
 51,255,255,116,0,0,0,0,0,
 2,
@@ -1728,300 +2218,451 @@
 25,
 51,255,255,116,0,0,0,128,191,1,
 58,
-56,156,0,
+56,208,0,
 51,255,255,116,0,0,
 1,
-57,143,0,0,0,
+57,195,0,0,0,
 1,
-57,153,0,0,2,
-57,155,0,0,
+57,205,0,0,2,
+57,207,0,0,
 32,0,
-57,144,0,0,
+57,196,0,0,
 2,
 52,1,0,0,0,0,1,
 22,
 1,
-57,156,0,1,15,
+57,208,0,1,15,
 1,
 25,
 51,255,255,116,0,0,0,128,63,1,
-57,156,0,0,1,
+57,208,0,0,1,
 58,
 44,
 8,
 51,255,255,209,0,2,
-57,156,0,0,
+57,208,0,0,
 25,
 51,255,255,116,0,0,0,128,63,1,1,
-29,62,0,
+29,68,0,
 2,
 52,1,2,0,
-55,159,0,
-17,48,1,
+55,211,0,
+17,65,1,
 51,255,255,209,0,2,
-55,160,0,
+55,212,0,
 17,225,0,
 51,255,255,209,0,2,2,0,
 0,0,
 1,0,4,
-56,159,0,
+56,211,0,
 51,255,255,209,0,0,
 50,
 1,
-57,53,0,0,2,
-57,255,255,30,3,0,2,0,1,
-56,160,0,
+57,59,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,212,0,
 51,255,255,209,0,0,
 27,
-51,255,255,209,0,32,0,3,
-57,56,0,0,
-57,57,0,0,
-57,159,0,0,
+51,255,255,209,0,38,0,3,
+57,62,0,0,
+57,63,0,0,
+57,211,0,0,
 22,
 1,
-57,160,0,1,15,
+57,212,0,1,15,
 27,
 51,255,255,209,0,22,0,2,
-57,58,0,0,
-57,160,0,0,
+57,64,0,0,
+57,212,0,0,
 44,
 27,
 51,255,255,11,0,28,0,3,
-57,54,0,0,
-57,55,0,0,
-57,160,0,0,1,
-29,71,0,
+57,60,0,0,
+57,61,0,0,
+57,212,0,0,1,
+29,80,0,
 2,
 52,1,2,0,
-55,161,0,
-17,48,1,
+55,213,0,
+17,65,1,
 51,255,255,209,0,2,
-55,162,0,
+55,214,0,
 17,225,0,
 51,255,255,209,0,2,2,0,
 0,0,
 1,0,4,
-56,161,0,
+56,213,0,
 51,255,255,209,0,0,
 50,
 1,
-57,65,0,0,2,
-57,255,255,30,3,0,2,0,1,
-56,162,0,
+57,71,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,214,0,
 51,255,255,209,0,0,
 27,
-51,255,255,209,0,36,0,3,
-57,68,0,0,
-57,69,0,0,
-57,161,0,0,
-22,
-1,
-57,162,0,1,15,
-27,
-51,255,255,209,0,22,0,2,
-57,70,0,0,
-57,162,0,0,
-44,
-27,
-51,255,255,11,0,28,0,3,
-57,66,0,0,
-57,67,0,0,
-57,162,0,0,1,
-29,84,0,
-2,
-52,1,2,0,
-55,163,0,
-17,48,1,
-51,255,255,209,0,2,
-55,164,0,
-17,225,0,
-51,255,255,209,0,2,2,0,
-0,0,
-1,0,4,
-56,163,0,
-51,255,255,209,0,0,
-50,
-1,
-57,74,0,0,2,
-57,255,255,30,3,0,2,0,1,
-56,164,0,
-51,255,255,209,0,0,
-27,
-51,255,255,209,0,41,0,4,
-57,77,0,0,
-57,78,0,0,
-57,79,0,0,
-57,163,0,0,
-22,
-1,
-57,164,0,1,15,
-27,
-51,255,255,209,0,22,0,2,
-57,80,0,0,
-57,164,0,0,
-44,
-27,
-51,255,255,11,0,28,0,3,
+51,255,255,209,0,38,0,3,
+57,74,0,0,
 57,75,0,0,
+57,213,0,0,
+22,
+1,
+57,214,0,1,15,
+27,
+51,255,255,209,0,22,0,2,
 57,76,0,0,
-57,164,0,0,1,
-29,96,0,
+57,214,0,0,
+44,
+27,
+51,255,255,11,0,34,0,3,
+57,72,0,0,
+57,73,0,0,
+57,214,0,0,1,
+29,89,0,
 2,
 52,1,2,0,
-55,165,0,
-17,48,1,
+55,215,0,
+17,65,1,
 51,255,255,209,0,2,
-55,166,0,
+55,216,0,
 17,225,0,
 51,255,255,209,0,2,2,0,
 0,0,
 1,0,4,
-56,165,0,
+56,215,0,
 51,255,255,209,0,0,
 50,
 1,
-57,87,0,0,2,
-57,255,255,30,3,0,2,0,1,
-56,166,0,
+57,83,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,216,0,
 51,255,255,209,0,0,
 27,
-51,255,255,209,0,50,0,5,
-57,90,0,0,
-57,91,0,0,
-57,92,0,0,
-57,93,0,0,
-57,165,0,0,
+51,255,255,209,0,42,0,3,
+57,86,0,0,
+57,87,0,0,
+57,215,0,0,
 22,
 1,
-57,166,0,1,15,
+57,216,0,1,15,
 27,
 51,255,255,209,0,22,0,2,
-57,94,0,0,
-57,166,0,0,
+57,88,0,0,
+57,216,0,0,
 44,
 27,
 51,255,255,11,0,28,0,3,
-57,88,0,0,
-57,89,0,0,
-57,166,0,0,1,
-29,100,0,
+57,84,0,0,
+57,85,0,0,
+57,216,0,0,1,
+29,98,0,
+2,
+52,1,2,0,
+55,217,0,
+17,65,1,
+51,255,255,209,0,2,
+55,218,0,
+17,225,0,
+51,255,255,209,0,2,2,0,
+0,0,
+1,0,4,
+56,217,0,
+51,255,255,209,0,0,
+50,
+1,
+57,92,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,218,0,
+51,255,255,209,0,0,
+27,
+51,255,255,209,0,42,0,3,
+57,95,0,0,
+57,96,0,0,
+57,217,0,0,
+22,
+1,
+57,218,0,1,15,
+27,
+51,255,255,209,0,22,0,2,
+57,97,0,0,
+57,218,0,0,
+44,
+27,
+51,255,255,11,0,34,0,3,
+57,93,0,0,
+57,94,0,0,
+57,218,0,0,1,
+29,111,0,
+2,
+52,1,2,0,
+55,219,0,
+17,65,1,
+51,255,255,209,0,2,
+55,220,0,
+17,225,0,
+51,255,255,209,0,2,2,0,
+0,0,
+1,0,4,
+56,219,0,
+51,255,255,209,0,0,
+50,
+1,
+57,101,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,220,0,
+51,255,255,209,0,0,
+27,
+51,255,255,209,0,47,0,4,
+57,104,0,0,
+57,105,0,0,
+57,106,0,0,
+57,219,0,0,
+22,
+1,
+57,220,0,1,15,
+27,
+51,255,255,209,0,22,0,2,
+57,107,0,0,
+57,220,0,0,
+44,
+27,
+51,255,255,11,0,28,0,3,
+57,102,0,0,
+57,103,0,0,
+57,220,0,0,1,
+29,124,0,
+2,
+52,1,2,0,
+55,221,0,
+17,65,1,
+51,255,255,209,0,2,
+55,222,0,
+17,225,0,
+51,255,255,209,0,2,2,0,
+0,0,
+1,0,4,
+56,221,0,
+51,255,255,209,0,0,
+50,
+1,
+57,114,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,222,0,
+51,255,255,209,0,0,
+27,
+51,255,255,209,0,47,0,4,
+57,117,0,0,
+57,118,0,0,
+57,119,0,0,
+57,221,0,0,
+22,
+1,
+57,222,0,1,15,
+27,
+51,255,255,209,0,22,0,2,
+57,120,0,0,
+57,222,0,0,
+44,
+27,
+51,255,255,11,0,34,0,3,
+57,115,0,0,
+57,116,0,0,
+57,222,0,0,1,
+29,136,0,
+2,
+52,1,2,0,
+55,223,0,
+17,65,1,
+51,255,255,209,0,2,
+55,224,0,
+17,225,0,
+51,255,255,209,0,2,2,0,
+0,0,
+1,0,4,
+56,223,0,
+51,255,255,209,0,0,
+50,
+1,
+57,127,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,224,0,
+51,255,255,209,0,0,
+27,
+51,255,255,209,0,56,0,5,
+57,130,0,0,
+57,131,0,0,
+57,132,0,0,
+57,133,0,0,
+57,223,0,0,
+22,
+1,
+57,224,0,1,15,
+27,
+51,255,255,209,0,22,0,2,
+57,134,0,0,
+57,224,0,0,
+44,
+27,
+51,255,255,11,0,28,0,3,
+57,128,0,0,
+57,129,0,0,
+57,224,0,0,1,
+29,148,0,
+2,
+52,1,2,0,
+55,225,0,
+17,65,1,
+51,255,255,209,0,2,
+55,226,0,
+17,225,0,
+51,255,255,209,0,2,2,0,
+0,0,
+1,0,4,
+56,225,0,
+51,255,255,209,0,0,
+50,
+1,
+57,139,0,0,2,
+57,255,255,143,3,0,2,0,1,
+56,226,0,
+51,255,255,209,0,0,
+27,
+51,255,255,209,0,56,0,5,
+57,142,0,0,
+57,143,0,0,
+57,144,0,0,
+57,145,0,0,
+57,225,0,0,
+22,
+1,
+57,226,0,1,15,
+27,
+51,255,255,209,0,22,0,2,
+57,146,0,0,
+57,226,0,0,
+44,
+27,
+51,255,255,11,0,34,0,3,
+57,140,0,0,
+57,141,0,0,
+57,226,0,0,1,
+29,152,0,
 2,
 52,1,29,0,
-55,167,0,
+55,227,0,
 38,
-16,4,123,4,
+16,4,236,4,
 51,255,255,110,0,2,
-55,168,0,
+55,228,0,
 38,
-16,4,130,4,
+16,4,243,4,
 51,255,255,110,0,2,
-55,169,0,
+55,229,0,
 38,
-16,4,135,4,
+16,4,248,4,
 51,255,255,110,0,2,
-55,170,0,
+55,230,0,
 38,
-16,4,140,4,
+16,4,253,4,
 51,255,255,110,0,2,
-55,171,0,
+55,231,0,
 38,
-16,4,149,4,
+16,4,6,5,
 51,255,255,110,0,2,
-55,172,0,
+55,232,0,
 38,
-16,4,158,4,
+16,4,15,5,
 51,255,255,110,0,2,
-55,173,0,
+55,233,0,
 38,
-16,4,165,4,
+16,4,22,5,
 51,255,255,110,0,2,
-55,174,0,
+55,234,0,
 38,
-16,4,172,4,
+16,4,29,5,
 51,255,255,110,0,2,
-55,175,0,
+55,235,0,
 38,
-16,4,180,4,
+16,4,37,5,
 51,255,255,110,0,2,
-55,176,0,
+55,236,0,
 38,
-16,4,188,4,
+16,4,45,5,
 51,255,255,110,0,2,
-55,177,0,
+55,237,0,
 38,
-16,4,197,4,
+16,4,54,5,
 51,255,255,110,0,2,
-55,178,0,
+55,238,0,
 38,
-16,4,206,4,
+16,4,63,5,
 51,255,255,110,0,2,
-55,179,0,
+55,239,0,
 38,
-16,4,211,4,
+16,4,68,5,
 51,255,255,110,0,2,
-55,180,0,
+55,240,0,
 38,
-16,4,217,4,
+16,4,74,5,
 51,255,255,110,0,2,
-55,181,0,
+55,241,0,
 38,
-16,4,227,4,
+16,4,84,5,
 51,255,255,110,0,2,
-55,182,0,
+55,242,0,
 38,
-16,4,235,4,
+16,4,92,5,
 51,255,255,110,0,2,
-55,183,0,
+55,243,0,
 38,
-16,4,244,4,
+16,4,101,5,
 51,255,255,110,0,2,
-55,184,0,
+55,244,0,
 38,
-16,4,252,4,
+16,4,109,5,
 51,255,255,110,0,2,
-55,185,0,
+55,245,0,
 38,
-16,4,5,5,
+16,4,118,5,
 51,255,255,110,0,2,
-55,186,0,
+55,246,0,
 38,
-16,4,17,5,
+16,4,130,5,
 51,255,255,110,0,2,
-55,187,0,
+55,247,0,
 38,
-16,4,28,5,
+16,4,141,5,
 51,255,255,110,0,2,
-55,188,0,
+55,248,0,
 38,
-16,4,39,5,
+16,4,152,5,
 51,255,255,110,0,2,
-55,189,0,
+55,249,0,
 38,
-16,4,50,5,
+16,4,163,5,
 51,255,255,110,0,2,
-55,190,0,
+55,250,0,
 38,
-16,4,62,5,
+16,4,175,5,
 51,255,255,110,0,2,
-55,191,0,
+55,251,0,
 38,
-16,4,73,5,
+16,4,186,5,
 51,255,255,110,0,2,
-55,192,0,
+55,252,0,
 38,
-16,4,83,5,
+16,4,196,5,
 51,255,255,110,0,2,
-55,193,0,
+55,253,0,
 38,
-16,4,88,5,
+16,4,201,5,
 51,255,255,110,0,2,
-55,194,0,
+55,254,0,
 38,
-16,4,100,5,
+16,4,213,5,
 51,255,255,110,0,2,
-55,195,0,
+55,255,0,
 38,
-16,4,107,5,
+16,4,220,5,
 51,255,255,110,0,2,29,0,
 0,0,
 27,0,
@@ -2054,35 +2695,35 @@
 11,0,1,
 49,0,
 52,1,29,0,
-51,167,0,
-51,168,0,
-51,169,0,
-51,170,0,
-51,171,0,
-51,172,0,
-51,173,0,
-51,174,0,
-51,175,0,
-51,176,0,
-51,177,0,
-51,178,0,
-51,179,0,
-51,180,0,
-51,181,0,
-51,182,0,
-51,183,0,
-51,184,0,
-51,185,0,
-51,186,0,
-51,187,0,
-51,188,0,
-51,189,0,
-51,190,0,
-51,191,0,
-51,192,0,
-51,193,0,
-51,194,0,
-51,195,0,29,0,
+51,227,0,
+51,228,0,
+51,229,0,
+51,230,0,
+51,231,0,
+51,232,0,
+51,233,0,
+51,234,0,
+51,235,0,
+51,236,0,
+51,237,0,
+51,238,0,
+51,239,0,
+51,240,0,
+51,241,0,
+51,242,0,
+51,243,0,
+51,244,0,
+51,245,0,
+51,246,0,
+51,247,0,
+51,248,0,
+51,249,0,
+51,250,0,
+51,251,0,
+51,252,0,
+51,253,0,
+51,254,0,
+51,255,0,29,0,
 0,0,
 27,0,
 19,0,
@@ -2112,351 +2753,351 @@
 7,0,
 3,0,
 11,0,
-57,97,0,0,30,0,0,0,0,0,
+57,149,0,0,30,0,0,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,119,5,2,
-57,98,0,0,
-57,99,0,0,1,0,1,0,0,0,
+51,255,255,11,0,255,255,232,5,2,
+57,150,0,0,
+57,151,0,0,1,0,1,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,131,5,2,
-57,98,0,0,
-57,99,0,0,1,0,2,0,0,0,
+51,255,255,11,0,255,255,244,5,2,
+57,150,0,0,
+57,151,0,0,1,0,2,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,141,5,2,
-57,98,0,0,
-57,99,0,0,1,0,3,0,0,0,
+51,255,255,11,0,255,255,254,5,2,
+57,150,0,0,
+57,151,0,0,1,0,3,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,191,1,0,4,0,0,0,
+51,255,255,37,3,0,0,128,191,1,0,4,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,128,191,
+51,255,255,37,3,0,0,128,191,
 25,
-51,255,255,180,2,0,0,0,0,1,0,5,0,0,0,
+51,255,255,37,3,0,0,0,0,1,0,5,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,0,0,1,0,6,0,0,0,
+51,255,255,37,3,0,0,0,0,1,0,6,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,63,1,0,7,0,0,0,
+51,255,255,37,3,0,0,128,63,1,0,7,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,191,
+51,255,255,37,3,0,0,128,191,
 25,
-51,255,255,180,2,0,0,0,0,1,0,8,0,0,0,
+51,255,255,37,3,0,0,0,0,1,0,8,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,191,1,0,9,0,0,0,
+51,255,255,37,3,0,0,128,191,1,0,9,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,128,191,1,0,10,0,0,0,
+51,255,255,37,3,0,0,128,191,1,0,10,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,191,
+51,255,255,37,3,0,0,128,191,
 25,
-51,255,255,180,2,0,0,128,63,1,0,11,0,0,0,
+51,255,255,37,3,0,0,128,63,1,0,11,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,128,191,
+51,255,255,37,3,0,0,128,191,
 25,
-51,255,255,180,2,0,0,128,191,1,0,12,0,0,0,
+51,255,255,37,3,0,0,128,191,1,0,12,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,151,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,8,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
 51,255,255,11,0,4,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,0,0,
+51,255,255,37,3,0,0,0,0,
 25,
-51,255,255,180,2,0,0,0,0,1,0,13,0,0,0,
+51,255,255,37,3,0,0,0,0,1,0,13,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,169,5,2,
-57,98,0,0,
-57,99,0,0,1,0,14,0,0,0,
+51,255,255,11,0,255,255,26,6,2,
+57,150,0,0,
+57,151,0,0,1,0,14,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,184,5,2,
-57,98,0,0,
-57,99,0,0,1,0,15,0,0,0,
+51,255,255,11,0,255,255,41,6,2,
+57,150,0,0,
+57,151,0,0,1,0,15,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,197,5,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,54,6,3,
+57,150,0,0,
+57,151,0,0,
 25,
-51,255,255,180,2,0,0,0,0,1,0,16,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,211,5,3,
-57,98,0,0,
-57,99,0,0,
-25,
-51,255,255,180,2,0,0,128,63,1,0,17,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,211,5,3,
-57,98,0,0,
-57,99,0,0,
-25,
-51,255,255,180,2,0,0,128,191,1,0,18,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,224,5,2,
-57,98,0,0,
-57,99,0,0,1,0,19,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,242,5,2,
-57,98,0,0,
-57,99,0,0,1,0,20,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,197,5,3,
-57,98,0,0,
-57,99,0,0,
-25,
-51,255,255,180,2,0,0,128,63,1,0,21,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,3,6,2,
-57,98,0,0,
-57,99,0,0,1,0,22,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,20,6,2,
-57,98,0,0,
-57,99,0,0,1,0,23,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,37,6,2,
-57,98,0,0,
-57,99,0,0,1,0,24,0,0,0,
-2,
-52,1,0,0,0,0,1,
-44,
-27,
-51,255,255,11,0,255,255,53,6,2,
-57,98,0,0,
-57,99,0,0,1,0,25,0,0,0,
+51,255,255,37,3,0,0,0,0,1,0,16,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
 51,255,255,11,0,255,255,68,6,3,
-57,98,0,0,
-57,99,0,0,
-8,
-51,255,255,79,6,2,
+57,150,0,0,
+57,151,0,0,
 25,
-51,255,255,180,2,0,0,0,0,
-25,
-51,255,255,180,2,0,0,128,63,1,0,26,0,0,0,
+51,255,255,37,3,0,0,128,63,1,0,17,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
 51,255,255,11,0,255,255,68,6,3,
-57,98,0,0,
-57,99,0,0,
+57,150,0,0,
+57,151,0,0,
+25,
+51,255,255,37,3,0,0,128,191,1,0,18,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,81,6,2,
+57,150,0,0,
+57,151,0,0,1,0,19,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,99,6,2,
+57,150,0,0,
+57,151,0,0,1,0,20,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,54,6,3,
+57,150,0,0,
+57,151,0,0,
+25,
+51,255,255,37,3,0,0,128,63,1,0,21,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,116,6,2,
+57,150,0,0,
+57,151,0,0,1,0,22,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,133,6,2,
+57,150,0,0,
+57,151,0,0,1,0,23,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,150,6,2,
+57,150,0,0,
+57,151,0,0,1,0,24,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,166,6,2,
+57,150,0,0,
+57,151,0,0,1,0,25,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,181,6,3,
+57,150,0,0,
+57,151,0,0,
+8,
+51,255,255,192,6,2,
+25,
+51,255,255,37,3,0,0,0,0,
+25,
+51,255,255,37,3,0,0,128,63,1,0,26,0,0,0,
+2,
+52,1,0,0,0,0,1,
+44,
+27,
+51,255,255,11,0,255,255,181,6,3,
+57,150,0,0,
+57,151,0,0,
 13,
-51,255,255,79,6,1,
+51,255,255,192,6,1,
 25,
-51,255,255,180,2,0,0,128,63,1,0,27,0,0,0,
+51,255,255,37,3,0,0,128,63,1,0,27,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,68,6,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,181,6,3,
+57,150,0,0,
+57,151,0,0,
 13,
-51,255,255,79,6,1,
+51,255,255,192,6,1,
 25,
-51,255,255,180,2,0,0,0,0,1,0,28,0,0,0,
+51,255,255,37,3,0,0,0,0,1,0,28,0,0,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,255,255,68,6,3,
-57,98,0,0,
-57,99,0,0,
+51,255,255,11,0,255,255,181,6,3,
+57,150,0,0,
+57,151,0,0,
 8,
-51,255,255,79,6,2,
+51,255,255,192,6,2,
 25,
-51,255,255,180,2,0,0,128,63,
+51,255,255,37,3,0,0,128,63,
 25,
-51,255,255,180,2,0,0,0,0,1,1,
+51,255,255,37,3,0,0,0,0,1,1,
 44,
 13,
 51,255,255,11,0,1,
 25,
-51,255,255,180,2,0,0,0,0,1,
-29,107,0,
+51,255,255,37,3,0,0,0,0,1,
+29,159,0,
 2,
 52,1,0,0,0,0,1,
 44,
 27,
-51,255,255,11,0,100,0,3,
-57,101,0,0,
-57,106,0,0,
-57,105,0,0,1,
+51,255,255,11,0,152,0,3,
+57,153,0,0,
+57,158,0,0,
+57,157,0,0,1,
 21,};
 static constexpr size_t SKSL_INCLUDE_sksl_graphite_frag_LENGTH = sizeof(SKSL_INCLUDE_sksl_graphite_frag);
diff --git a/src/sksl/sksl_graphite_frag.sksl b/src/sksl/sksl_graphite_frag.sksl
index 7f3de61..4f544fc 100644
--- a/src/sksl/sksl_graphite_frag.sksl
+++ b/src/sksl/sksl_graphite_frag.sksl
@@ -106,6 +106,59 @@
     }
 }
 
+half4 $colorize_grad_8(float4 colorsParam[8], float offsetsParam[8], float2 t) {
+    if (t.y < 0) {
+        return half4(0);
+
+    // Unrolled binary search through intervals
+    // ( .. 0), (0 .. 1), (1 .. 2), (2 .. 3), (3 .. 4), (4 .. 5), (5 .. 6), (6 .. 7), (7 .. ).
+    } else if (t.x < offsetsParam[4]) {
+        if (t.x < offsetsParam[2]) {
+            if (t.x <= offsetsParam[0]) {
+                return half4(colorsParam[0]);
+            } else if (t.x < offsetsParam[1]) {
+                return half4(mix(colorsParam[0], colorsParam[1],
+                                 (t.x             - offsetsParam[0]) /
+                                 (offsetsParam[1] - offsetsParam[0])));
+            } else {
+                return half4(mix(colorsParam[1], colorsParam[2],
+                                 (t.x             - offsetsParam[1]) /
+                                 (offsetsParam[2] - offsetsParam[1])));
+            }
+        } else {
+            if (t.x < offsetsParam[3]) {
+                return half4(mix(colorsParam[2], colorsParam[3],
+                                 (t.x             - offsetsParam[2]) /
+                                 (offsetsParam[3] - offsetsParam[2])));
+            } else {
+                return half4(mix(colorsParam[3], colorsParam[4],
+                                 (t.x             - offsetsParam[3]) /
+                                 (offsetsParam[4] - offsetsParam[3])));
+            }
+        }
+    } else {
+        if (t.x < offsetsParam[6]) {
+            if (t.x < offsetsParam[5]) {
+                return half4(mix(colorsParam[4], colorsParam[5],
+                                 (t.x             - offsetsParam[4]) /
+                                 (offsetsParam[5] - offsetsParam[4])));
+            } else {
+                return half4(mix(colorsParam[5], colorsParam[6],
+                                 (t.x             - offsetsParam[5]) /
+                                 (offsetsParam[6] - offsetsParam[5])));
+            }
+        } else {
+            if (t.x < offsetsParam[7]) {
+                return half4(mix(colorsParam[6], colorsParam[7],
+                                 (t.x             - offsetsParam[6]) /
+                                 (offsetsParam[7] - offsetsParam[6])));
+            } else {
+                return half4(colorsParam[7]);
+            }
+        }
+    }
+}
+
 float2 $linear_grad_layout(float2 point0Param, float2 point1Param, float2 pos) {
     pos -= point0Param;
     float2 delta = point1Param - point0Param;
@@ -276,6 +329,21 @@
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
+half4 sk_linear_grad_8_shader(float4x4 dev2Local,
+                              float4 colorsParam[8],
+                              float offsetsParam[8],
+                              float2 point0Param,
+                              float2 point1Param,
+                              int tileMode,
+                              float padding0,
+                              float padding1,
+                              float padding2) {
+    float2 pos = (dev2Local * sk_FragCoord).xy;
+    float2 t = $linear_grad_layout(point0Param, point1Param, pos);
+    t = $tile_grad(tileMode, t);
+    return $colorize_grad_8(colorsParam, offsetsParam, t);
+}
+
 half4 sk_radial_grad_4_shader(float4x4 dev2Local,
                               float4 colorsParam[4],
                               float offsetsParam[4],
@@ -288,6 +356,18 @@
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
+half4 sk_radial_grad_8_shader(float4x4 dev2Local,
+                              float4 colorsParam[8],
+                              float offsetsParam[8],
+                              float2 centerParam,
+                              float radiusParam,
+                              int tileMode) {
+    float2 pos = (dev2Local * sk_FragCoord).xy;
+    float2 t = $radial_grad_layout(centerParam, radiusParam, pos);
+    t = $tile_grad(tileMode, t);
+    return $colorize_grad_8(colorsParam, offsetsParam, t);
+}
+
 half4 sk_sweep_grad_4_shader(float4x4 dev2Local,
                              float4 colorsParam[4],
                              float offsetsParam[4],
@@ -304,6 +384,22 @@
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
+half4 sk_sweep_grad_8_shader(float4x4 dev2Local,
+                             float4 colorsParam[8],
+                             float offsetsParam[8],
+                             float2 centerParam,
+                             float biasParam,
+                             float scaleParam,
+                             int tileMode,
+                             float padding0,
+                             float padding1,
+                             float padding2) {
+    float2 pos = (dev2Local * sk_FragCoord).xy;
+    float2 t = $sweep_grad_layout(centerParam, biasParam, scaleParam, pos);
+    t = $tile_grad(tileMode, t);
+    return $colorize_grad_8(colorsParam, offsetsParam, t);
+}
+
 half4 sk_conical_grad_4_shader(float4x4 dev2Local,
                                float4 colorsParam[4],
                                float offsetsParam[4],
@@ -319,6 +415,21 @@
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
+half4 sk_conical_grad_8_shader(float4x4 dev2Local,
+                               float4 colorsParam[8],
+                               float offsetsParam[8],
+                               float2 point0Param,
+                               float2 point1Param,
+                               float radius0Param,
+                               float radius1Param,
+                               int tileMode,
+                               float padding) {
+    float2 pos = (dev2Local * sk_FragCoord).xy;
+    float2 t = $conical_grad_layout(point0Param, point1Param, radius0Param, radius1Param, pos);
+    t = $tile_grad(tileMode, t);
+    return $colorize_grad_8(colorsParam, offsetsParam, t);
+}
+
 half4 sk_blend(int blendMode, half4 src, half4 dst) {
     const int kClear      = 0;
     const int kSrc        = 1;