<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>24244</bug_id>
          
          <creation_ts>2009-02-27 12:18:19 -0800</creation_ts>
          <short_desc>Chromium Linux: switch to using Skia for widget renderer</short_desc>
          <delta_ts>2009-03-03 22:09:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Langley">agl</reporter>
          <assigned_to name="Adam Langley">agl</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111522</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-02-27 12:18:19 -0800</bug_when>
    <thetext>Chromium Linux: Switch to using Skia to render widgets.

In order to sandbox the Chromium renderer on Linux we need to remove the
X connection. GTK cannot render without an X connection so, for now, we
render widgets ourselves.

Previously use didn&apos;t anti-alias fonts in order to match Windows font
rendering exactly. This was helpful when bootstrapping our layout
tests. Now, however, we are ready to enable it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111523</commentid>
    <comment_count>1</comment_count>
      <attachid>28098</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-02-27 12:18:37 -0800</bug_when>
    <thetext>Created attachment 28098
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111550</commentid>
    <comment_count>2</comment_count>
      <attachid>28098</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-02-27 14:16:23 -0800</bug_when>
    <thetext>Comment on attachment 28098
patch

&gt;diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt;+2009-02-27  Adam Langley  &lt;agl@chromium.org&gt;
...
&gt;+        WARNING: NO TEST CASES ADDED OR CHANGED

nit: please remove this WARNING line... and add a link to this bug.


&gt;+        * rendering/RenderThemeChromiumLinux.cpp: Added.
&gt;+        (WebCore::):
&gt;+        (WebCore::supportsFocus):
&gt;+        (WebCore::setSizeIfAuto):
&gt;+        (WebCore::defaultGUIFont):
&gt;+        (WebCore::theme):

nit: when adding a new file, please delete all of the functions that
prepare-ChangeLog added.



&gt;+++ b/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp
...
&gt; void ScrollbarThemeChromium::paintThumb(GraphicsContext* gc, Scrollbar* scrollbar, const IntRect&amp; rect)
&gt; {
...
&gt;+    SkPaint paint;
&gt;+    if (hovered) {
&gt;+      paint.setARGB(255, 0xff, 0xff, 0xff);
&gt;+    } else {
&gt;+      paint.setARGB(255, 0xf4, 0xf2, 0xef);
&gt;+    }

nit: indentation should be 4 spaces, and you should not use brackets
when there is only a single line statement.

please see:  http://webkit.org/coding/coding-style.html


&gt;+++ b/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp
...
&gt;+    paint-&gt;setAntiAlias(true);

Making friends in high places?


&gt;+++ b/WebCore/rendering/RenderThemeChromiumLinux.cpp

It might be better to do a &quot;svn mv&quot; so that this diff would just
show your changes.


&gt;+Color RenderThemeChromiumLinux::platformActiveSelectionBackgroundColor() const
&gt;+{
&gt;+    return Color(0x1e, 0x90, 0xff);
&gt;+}
&gt;+
&gt;+Color RenderThemeChromiumLinux::platformInactiveSelectionBackgroundColor() const
&gt;+{
&gt;+    return Color(200, 200, 200);
&gt;+}

sometimes hex, sometimes decimal?


&gt;+void RenderThemeChromiumLinux::systemFont(int propId, Document* document, FontDescription&amp; fontDescription) const
&gt;+{
&gt;+  fontDescription.firstFamily().setFamily(defaultGUIFont(NULL));
&gt;+  fontDescription.setSpecifiedSize(12);

bad indentation


&gt;+++ b/WebCore/rendering/RenderThemeChromiumLinux.h

&gt;+        virtual void adjustButtonInnerStyle(RenderStyle* style) const;

nit: please remove the parameter name since it doesn&apos;t add any information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111860</commentid>
    <comment_count>3</comment_count>
      <attachid>28188</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-03-02 11:17:16 -0800</bug_when>
    <thetext>Created attachment 28188
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111865</commentid>
    <comment_count>4</comment_count>
      <attachid>28188</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-03-02 11:31:13 -0800</bug_when>
    <thetext>Comment on attachment 28188
patch

&gt;+++ b/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
...
&gt;+    const int girth = 0;
&gt;+    // On Linux, we don&apos;t use buttons
&gt;+    return IntSize(0, 0);

seems like it shouldn&apos;t be necessary to define girth given the early return,
or does GCC complain without it being there?


&gt;+++ b/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp

&gt;+    paint.setARGB(255, 0xe3, 0xdd, 0xd8);
...
&gt;+    paint.setARGB(255, 0xc5, 0xba, 0xb0);

the mixing of decimal and hex really seems odd to me...  is that somehow
conventional?  (this hurts my brain)


&gt;+++ b/WebCore/rendering/RenderThemeChromiumLinux.cpp

&gt;+        paint.setARGB(255, 0xe9, 0xe9, 0xe9);

ditto (and elsewhere in this file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111887</commentid>
    <comment_count>5</comment_count>
      <attachid>28194</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-03-02 13:18:00 -0800</bug_when>
    <thetext>Created attachment 28194
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111888</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-03-02 13:19:39 -0800</bug_when>
    <thetext>Have addressed all comments. It seems that replying to the bugzilla emails doesn&apos;t actually do anything, so sorry you missed the reply to the first one - but I believe I addressed everything there too. Patch interdiff follows since bugzilla doesn&apos;t seem to supply them:

diff --git a/WebCore/platform/chromium/ScrollbarThemeChromium.cpp b/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
index 3096785..426a078 100644
--- a/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
+++ b/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
@@ -167,6 +167,11 @@ bool ScrollbarThemeChromium::shouldCenterOnThumb(Scrollbar*, const PlatformMouse
 
 IntSize ScrollbarThemeChromium::buttonSize(Scrollbar* scrollbar)
 {
+#if defined(__linux__)
+    // On Linux, we don&apos;t use buttons
+    return IntSize(0, 0);
+#endif
+
     // Our desired rect is essentially thickness by thickness.
 
     // Our actual rect will shrink to half the available space when we have &lt; 2
@@ -175,20 +180,13 @@ IntSize ScrollbarThemeChromium::buttonSize(Scrollbar* scrollbar)
 
     int thickness = scrollbarThickness(scrollbar-&gt;controlSize());
 
-#if !defined(__linux__)
     // In layout test mode, we force the button &quot;girth&quot; (i.e., the length of
     // the button along the axis of the scrollbar) to be a fixed size.
     // FIXME: This is retarded!  scrollbarThickness is already fixed in layout
     // test mode so that should be enough to result in repeatable results, but
     // preserving this hack avoids having to rebaseline pixel tests.
     const int kLayoutTestModeGirth = 17;
-
     int girth = ChromiumBridge::layoutTestMode() ? kLayoutTestModeGirth : thickness;
-#else
-    const int girth = 0;
-    // On Linux, we don&apos;t use buttons
-    return IntSize(0, 0);
-#endif
 
     if (scrollbar-&gt;orientation() == HorizontalScrollbar) {
         int width = scrollbar-&gt;width() &lt; 2 * girth ? scrollbar-&gt;width() / 2 : girth;
diff --git a/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp b/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp
index 6694946..11e2472 100644
--- a/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp
+++ b/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp
@@ -58,12 +58,12 @@ void ScrollbarThemeChromium::paintTrackPiece(GraphicsContext* gc, Scrollbar* scr
     SkCanvas* const canvas = gc-&gt;platformContext()-&gt;canvas();
 
     SkPaint paint;
-    paint.setARGB(255, 0xe3, 0xdd, 0xd8);
+    paint.setARGB(0xff, 0xe3, 0xdd, 0xd8);
     SkRect skrect;
     skrect.set(rect.x(), rect.y(), right, bottom);
     canvas-&gt;drawRect(skrect, paint);
 
-    paint.setARGB(255, 0xc5, 0xba, 0xb0);
+    paint.setARGB(0xff, 0xc5, 0xba, 0xb0);
     canvas-&gt;drawLine(rect.x(), rect.y(), rect.x(), bottom, paint);
     canvas-&gt;drawLine(right, rect.y(), right, bottom, paint);
     canvas-&gt;drawLine(rect.x(), rect.y(), right, rect.y(), paint);
@@ -88,9 +88,9 @@ void ScrollbarThemeChromium::paintThumb(GraphicsContext* gc, Scrollbar* scrollba
 
     SkPaint paint;
     if (hovered)
-        paint.setARGB(255, 0xff, 0xff, 0xff);
+        paint.setARGB(0xff, 0xff, 0xff, 0xff);
     else
-        paint.setARGB(255, 0xf4, 0xf2, 0xef);
+        paint.setARGB(0xff, 0xf4, 0xf2, 0xef);
 
     SkRect skrect;
     if (vertical) {
@@ -101,9 +101,9 @@ void ScrollbarThemeChromium::paintThumb(GraphicsContext* gc, Scrollbar* scrollba
     canvas-&gt;drawRect(skrect, paint);
 
     if (hovered) {
-      paint.setARGB(255, 0xf4, 0xf2, 0xef);
+      paint.setARGB(0xff, 0xf4, 0xf2, 0xef);
     } else {
-      paint.setARGB(255, 0xea, 0xe5, 0xe0);
+      paint.setARGB(0xff, 0xea, 0xe5, 0xe0);
     }
     if (vertical) {
       skrect.set(midx + 1, rect.y(), right, bottom);
@@ -112,14 +112,14 @@ void ScrollbarThemeChromium::paintThumb(GraphicsContext* gc, Scrollbar* scrollba
     }
     canvas-&gt;drawRect(skrect, paint);
 
-    paint.setARGB(255, 0x9d, 0x96, 0x8e);
+    paint.setARGB(0xff, 0x9d, 0x96, 0x8e);
     canvas-&gt;drawLine(rect.x(), rect.y(), rect.x(), bottom, paint);
     canvas-&gt;drawLine(right, rect.y(), right, bottom, paint);
     canvas-&gt;drawLine(rect.x(), rect.y(), right, rect.y(), paint);
     canvas-&gt;drawLine(rect.x(), bottom, right, bottom, paint);
 
     if (rect.height() &gt; 10 &amp;&amp; rect.width() &gt; 10) {
-      paint.setARGB(255, 0x9d, 0x96, 0x8e);
+      paint.setARGB(0xff, 0x9d, 0x96, 0x8e);
       canvas-&gt;drawLine(midx - 1, midy, midx + 3, midy, paint);
       canvas-&gt;drawLine(midx - 1, midy - 3, midx + 3, midy - 3, paint);
       canvas-&gt;drawLine(midx - 1, midy + 3, midx + 3, midy + 3, paint);
diff --git a/WebCore/rendering/RenderThemeChromiumLinux.cpp b/WebCore/rendering/RenderThemeChromiumLinux.cpp
index 086552d..2a078ce 100644
--- a/WebCore/rendering/RenderThemeChromiumLinux.cpp
+++ b/WebCore/rendering/RenderThemeChromiumLinux.cpp
@@ -204,7 +204,7 @@ static void paintButtonLike(RenderTheme* theme, RenderObject* o, const RenderObj
 
     // If the button is too small, fallback to drawing a single, solid color
     if (rect.width() &lt; 5 || rect.height() &lt; 5) {
-        paint.setARGB(255, 0xe9, 0xe9, 0xe9);
+        paint.setARGB(0xff, 0xe9, 0xe9, 0xe9);
         skrect.set(rect.x(), rect.y(), right, bottom);
         canvas-&gt;drawRect(skrect, paint);
         return;
@@ -217,15 +217,15 @@ static void paintButtonLike(RenderTheme* theme, RenderObject* o, const RenderObj
     canvas-&gt;drawLine(rect.x() + 1, bottom - 1, right - 1, bottom - 1, paint);
     canvas-&gt;drawLine(rect.x(), rect.y() + 1, rect.x(), bottom - 1, paint);
 
-    paint.setARGB(255, 0, 0, 0);
+    paint.setARGB(0xff, 0, 0, 0);
     SkPoint p[2];
     const int lightEnd = theme-&gt;isPressed(o) ? 1 : 0;
     const int darkEnd = !lightEnd;
     p[lightEnd].set(SkIntToScalar(rect.x()), SkIntToScalar(rect.y()));
     p[darkEnd].set(SkIntToScalar(rect.x()), SkIntToScalar(bottom - 1));
     SkColor colors[2];
-    colors[0] = SkColorSetARGB(255, 0xf8, 0xf8, 0xf8);
-    colors[1] = SkColorSetARGB(255, 0xdd, 0xdd, 0xdd);
+    colors[0] = SkColorSetARGB(0xff, 0xf8, 0xf8, 0xf8);
+    colors[1] = SkColorSetARGB(0xff, 0xdd, 0xdd, 0xdd);
 
     SkShader* s = SkGradientShader::CreateLinear(
         p, colors, NULL, 2, SkShader::kClamp_TileMode, NULL);
@@ -237,7 +237,7 @@ static void paintButtonLike(RenderTheme* theme, RenderObject* o, const RenderObj
     canvas-&gt;drawRect(skrect, paint);
 
     paint.setShader(NULL);
-    paint.setARGB(255, 0xce, 0xce, 0xce);
+    paint.setARGB(0xff, 0xce, 0xce, 0xce);
     canvas-&gt;drawPoint(rect.x() + 1, rect.y() + 1, paint);
     canvas-&gt;drawPoint(right - 2, rect.y() + 1, paint);
     canvas-&gt;drawPoint(rect.x() + 1, bottom - 2, paint);
@@ -290,7 +290,7 @@ bool RenderThemeChromiumLinux::paintMenuList(RenderObject* o, const RenderObject
     paintButtonLike(this, o, i, rect);
 
     SkPaint paint;
-    paint.setARGB(255, 0, 0, 0);
+    paint.setARGB(0xff, 0, 0, 0);
     paint.setAntiAlias(true);
     paint.setStyle(SkPaint::kFill_Style);
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111925</commentid>
    <comment_count>7</comment_count>
      <attachid>28194</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-03-02 16:06:15 -0800</bug_when>
    <thetext>Comment on attachment 28194
patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111937</commentid>
    <comment_count>8</comment_count>
      <attachid>28206</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-03-02 17:26:18 -0800</bug_when>
    <thetext>Created attachment 28206
patch

Merge with trunk: collided with Ojan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112137</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-03-03 22:09:46 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41416</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28098</attachid>
            <date>2009-02-27 12:18:37 -0800</date>
            <delta_ts>2009-03-02 11:17:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>59141</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2M4NTBlZC4uNGU0OTZmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAwOS0wMi0yNyAgQWRhbSBMYW5nbGV5
ICA8YWdsQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaHJvbWl1bSBMaW51eDogU3dpdGNoIHRvIHVzaW5nIFNraWEgdG8gcmVu
ZGVyIHdpZGdldHMuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc2FuZGJveCB0aGUgQ2hyb21pdW0g
cmVuZGVyZXIgb24gTGludXggd2UgbmVlZCB0byByZW1vdmUgdGhlCisgICAgICAgIFggY29ubmVj
dGlvbi4gR1RLIGNhbm5vdCByZW5kZXIgd2l0aG91dCBhbiBYIGNvbm5lY3Rpb24gc28sIGZvciBu
b3csIHdlCisgICAgICAgIHJlbmRlciB3aWRnZXRzIG91cnNlbHZlcy4KKworICAgICAgICBQcmV2
aW91c2x5IHVzZSBkaWRuJ3QgYW50aS1hbGlhcyBmb250cyBpbiBvcmRlciB0byBtYXRjaCBXaW5k
b3dzIGZvbnQKKyAgICAgICAgcmVuZGVyaW5nIGV4YWN0bHkuIFRoaXMgd2FzIGhlbHBmdWwgd2hl
biBib290c3RyYXBwaW5nIG91ciBsYXlvdXQKKyAgICAgICAgdGVzdHMuIE5vdywgaG93ZXZlciwg
d2UgYXJlIHJlYWR5IHRvIGVuYWJsZSBpdC4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENB
U0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtTGludXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNpemVJZkF1dG8p
OgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdEdVSUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
dGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5k
ZXJUaGVtZUNocm9taXVtTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3VwcG9ydHNGb2N1c1JpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OmNhcmV0QmxpbmtJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRDaGVja2JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNldENoZWNrYm94U2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50UmFkaW8p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRSYWRpb1Np
emUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRCdXR0b25MaWtlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRleHRGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RN
ZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRl
cm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RCdXR0b25Jbm5lclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6Y29udHJv
bFN1cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6Om1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3VwcG9ydHNIb3Zlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VGV4dEFyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzdXBwb3J0c0NvbnRy
b2xUaW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4
dFNraWEpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNr
aWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURh
dGFMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXR1cFBh
aW50KToKKwogMjAwOS0wMi0yNiAgQnJldHQgV2lsc29uICA8YnJldHR3QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBGaXggV2luZG93cyB0cmFuc3BhcmVuY3kgZm9yIHRoZSBDaHJvbWl1bSBwb3J0
LiBJbXBsZW1lbnQgYSBoZWxwZXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCmluZGV4IDRhNTU4MDYuLjMwOTY3ODUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
LmNwcApAQCAtMTg1LDcgKzE4NSw5IEBAIEludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6
YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKIAogICAgIGludCBnaXJ0aCA9IENocm9t
aXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpID8ga0xheW91dFRlc3RNb2RlR2lydGggOiB0aGlj
a25lc3M7CiAjZWxzZQotICAgIGludCBnaXJ0aCA9IHRoaWNrbmVzczsKKyAgICBjb25zdCBpbnQg
Z2lydGggPSAwOworICAgIC8vIE9uIExpbnV4LCB3ZSBkb24ndCB1c2UgYnV0dG9ucworICAgIHJl
dHVybiBJbnRTaXplKDAsIDApOwogI2VuZGlmCiAKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA5
NWQwZjc4Li45OWNjZmNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCkBAIC0zNywyMSArMzcsMTEgQEAK
ICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogCi0jaW5jbHVkZSAiZ3RrZHJhd2luZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlICJza2lhL2V4dC9HZGtTa2lhLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW50IFNj
cm9sbGJhclRoZW1lQ2hyb21pdW06OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSkKIHsKLSAgICBzdGF0aWMgaW50IHNpemUgPSAwOwotICAgIGlmICgh
c2l6ZSkgewotICAgICAgICBNb3pHdGtTY3JvbGxiYXJNZXRyaWNzIG1ldHJpY3M7Ci0gICAgICAg
IG1vel9ndGtfZ2V0X3Njcm9sbGJhcl9tZXRyaWNzKCZtZXRyaWNzKTsKLSAgICAgICAgc2l6ZSA9
IG1ldHJpY3Muc2xpZGVyX3dpZHRoOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1
cm4gMTU7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6aW52YWxpZGF0ZU9uTW91
c2VFbnRlckV4aXQoKQpAQCAtNjAsODkgKzUwLDgwIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bTo6aW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotLy8gR2l2ZW4gYW4gdW5pbml0aWFsaXNlZCB3aWRnZXQgc3RhdGUgb2JqZWN0LCBzZXQgdGhl
IG1lbWJlcnMgc3VjaCB0aGF0IGl0J3MKLS8vIHNhbmUgZm9yIGRyYXdpbmcgc2Nyb2xsYmFycwot
c3RhdGljIHZvaWQgaW5pdE1velN0YXRlKEd0a1dpZGdldFN0YXRlKiBtb3pTdGF0ZSkKLXsKLSAg
ICBtb3pTdGF0ZS0+YWN0aXZlID0gdHJ1ZTsKLSAgICBtb3pTdGF0ZS0+Zm9jdXNlZCA9IGZhbHNl
OwotICAgIG1velN0YXRlLT5pbkhvdmVyID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmRpc2FibGVk
ID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmlzRGVmYXVsdCA9IGZhbHNlOwotICAgIG1velN0YXRl
LT5jYW5EZWZhdWx0ID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmRlcHJlc3NlZCA9IGZhbHNlOwot
ICAgIG1velN0YXRlLT5jdXJwb3MgPSAwOwotICAgIG1velN0YXRlLT5tYXhwb3MgPSAwOwotfQot
Ci0vLyBQYWludCBhIEdUSyB3aWRnZXQKLS8vICAgZ2M6IGNvbnRleHQgdG8gZHJhdyBvbnRvCi0v
LyAgIHJlY3Q6IHRoZSBhcmVhIG9mIHRoZSB3aWRnZXQKLS8vICAgd2lkZ2V0X3R5cGU6IHRoZSB0
eXBlIG9mIHdpZGdldCB0byBkcmF3Ci0vLyAgIGZsYWdzOiB3aWRnZXQgZGVwZW5kZW50IGZsYWdz
IChlLmcuIGRpcmVjdGlvbiBvZiBzY3JvbGxiYXIgYXJyb3dzIGV0YykKLS8vCi0vLyBTZWUgcGFp
bnRNb3pXaWdldCBpbiBSZW5kZXJUaGVtZUd0ay5jcHAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRo
ZSBjbGlwcGluZy4KLXN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyV2lkZ2V0KEdyYXBoaWNzQ29u
dGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0X3R5cGUsIGdpbnQgZmxhZ3MpCi17Ci0g
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0g
ICAgR2RrUmVjdGFuZ2xlIGdka1JlY3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpIH07Ci0KLSAgICBjb25zdCBTa0lSZWN0IGNsaXBfcmVnaW9uID0g
cGNzLT5jYW52YXMoKS0+Z2V0VG90YWxDbGlwKCkuZ2V0Qm91bmRzKCk7Ci0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY3RtID0gZ2MtPmdldENUTSgpLmludmVyc2UoKTsKLSAgICBJbnRQb2ludCBw
b3MgPSBjdG0ubWFwUG9pbnQoCi0gICAgICAgIEludFBvaW50KFNrU2NhbGFyUm91bmQoY2xpcF9y
ZWdpb24uZkxlZnQpLCBTa1NjYWxhclJvdW5kKGNsaXBfcmVnaW9uLmZUb3ApKSk7Ci0gICAgR2Rr
UmVjdGFuZ2xlIGdka0NsaXBSZWN0OwotICAgIGdka0NsaXBSZWN0LnggPSBwb3MueCgpOwotICAg
IGdka0NsaXBSZWN0LnkgPSBwb3MueSgpOwotICAgIGdka0NsaXBSZWN0LndpZHRoID0gY2xpcF9y
ZWdpb24ud2lkdGgoKTsKLSAgICBnZGtDbGlwUmVjdC5oZWlnaHQgPSBjbGlwX3JlZ2lvbi5oZWln
aHQoKTsKLQotICAgIGdka19yZWN0YW5nbGVfaW50ZXJzZWN0KCZnZGtSZWN0LCAmZ2RrQ2xpcFJl
Y3QsICZnZGtDbGlwUmVjdCk7Ci0KLSAgICBHdGtXaWRnZXRTdGF0ZSBtb3pTdGF0ZTsKLSAgICBp
bml0TW96U3RhdGUoJm1velN0YXRlKTsKLQotICAgIG1vel9ndGtfd2lkZ2V0X3BhaW50KHdpZGdl
dF90eXBlLCBwY3MtPmdka19za2lhKCksICZnZGtSZWN0LCAmZ2RrQ2xpcFJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJm1velN0YXRlLCBmbGFncywgR1RLX1RFWFRfRElSX0xUUik7Ci19
Ci0KIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNz
Q29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFy
dCBwYXJ0VHlwZSkKIHsKLSAgICBjb25zdCBib29sIGhvcnogPSBzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBjb25zdCBHdGtUaGVtZVdpZGdldFR5
cGUgdHJhY2tfdHlwZSA9Ci0gICAgICAgIGhvcnogPyBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19I
T1JJWk9OVEFMIDogTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUw7Ci0gICAgcGFpbnRT
Y3JvbGxiYXJXaWRnZXQoZ2MsIHJlY3QsIHRyYWNrX3R5cGUsIDApOwotfQorICAgIGNvbnN0IGlu
dCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBib3R0b20g
PSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0
JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCi17Ci0gICAgLy8gRklYTUU6IEl0IGFwcGVhcnMg
dGhlIGVpdGhlciB3ZSdyZSB1cHNldHRpbmcgR1RLIGJ5IGZvcmNpbmcgV2ViS2l0IHNpemVzCi0g
ICAgLy8gb24gaXQsIG9yIHRoZSBidXR0b25zIGV4cGVjdCB0aGUgdHJhY2sgdG8gYmUgZHJhd24g
dW5kZXIgdGhlbS4gIEVpdGhlcgotICAgIC8vIHdheSwgd2UgZW5kIHVwIHdpdGggdW5wYWludGVk
IHBpeGVscyB3aGljaCBhcmUgdXBzZXR0aW5nIHRoZSBwaXhlbAotICAgIC8vIHRlc3RzLiBUaHVz
IHdlIHBhaW50IGdyZWVuIHVuZGVyIHRoZSBidXR0b25zIHRvLCBhdCBsZWFzdCwgbWFrZSB0aGUK
LSAgICAvLyBwaXhlbCBvdXRwdXQgdGhlIHNhbWUgYmV0d2VlbiBkZWJ1ZyBhbmQgb3B0IGJ1aWxk
cy4KICAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldEFSR0IoMjU1LCAwLCAyNTUsIDEy
OCk7CisgICAgcGFpbnQuc2V0QVJHQigyNTUsIDB4ZTMsIDB4ZGQsIDB4ZDgpOwogICAgIFNrUmVj
dCBza3JlY3Q7Ci0gICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsg
cmVjdC53aWR0aCgpIC0gMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gMSk7Ci0gICAgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7Cisg
ICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJpZ2h0LCBib3R0b20pOworICAgIGNh
bnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CisKKyAgICBwYWludC5zZXRBUkdCKDI1NSwg
MHhjNSwgMHhiYSwgMHhiMCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwgcmVjdC55
KCksIHJlY3QueCgpLCBib3R0b20sIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJpZ2h0
LCByZWN0LnkoKSwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUo
cmVjdC54KCksIHJlY3QueSgpLCByaWdodCwgcmVjdC55KCksIHBhaW50KTsKKyAgICBjYW52YXMt
PmRyYXdMaW5lKHJlY3QueCgpLCBib3R0b20sIHJpZ2h0LCBib3R0b20sIHBhaW50KTsKK30KIAot
ICAgIGNvbnN0IGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyOwotICAgIGdpbnQgZmxhZ3MgPSBob3J6ID8gMCA6IE1PWl9HVEtfU1RFUFBF
Ul9WRVJUSUNBTDsKLSAgICBmbGFncyB8PSBGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBwYXJ0ID8g
TU9aX0dUS19TVEVQUEVSX0RPV04gOiAwOwotICAgIHBhaW50U2Nyb2xsYmFyV2lkZ2V0KGdjLCBy
ZWN0LCBNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT04sIGZsYWdzKTsKK3ZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3sKKyAgICAvLyBXZSBkb24ndCB1
c2UgYnV0dG9ucwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGh1bWIo
R3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgY29uc3QgYm9vbCBob3J6ID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgY29uc3QgR3RrVGhlbWVXaWRnZXRUeXBlIHRo
dW1iX3R5cGUgPQotICAgICAgICBob3J6ID8gTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpP
TlRBTCA6IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX1ZFUlRJQ0FMOwotICAgIHBhaW50U2Nyb2xs
YmFyV2lkZ2V0KGdjLCByZWN0LCB0aHVtYl90eXBlLCAwKTsKKyAgICBjb25zdCBib29sIGhvdmVy
ZWQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0OworICAgIGNvbnN0IGlu
dCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBib3R0b20g
PSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgY29uc3QgaW50IG1pZHggPSByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSAvIDI7CisgICAgY29uc3QgaW50IG1pZHkgPSByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkgLyAyOworICAgIGNvbnN0IGJvb2wgdmVydGljYWwgPSBzY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7CisgICAgU2tDYW52YXMqIGNvbnN0IGNh
bnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisKKyAgICBTa1BhaW50IHBh
aW50OworICAgIGlmIChob3ZlcmVkKSB7CisgICAgICBwYWludC5zZXRBUkdCKDI1NSwgMHhmZiwg
MHhmZiwgMHhmZik7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhaW50LnNldEFSR0IoMjU1LCAweGY0
LCAweGYyLCAweGVmKTsKKyAgICB9CisgICAgU2tSZWN0IHNrcmVjdDsKKyAgICBpZiAodmVydGlj
YWwpIHsKKyAgICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCBtaWR4ICsgMSwgYm90
dG9tKTsKKyAgICB9IGVsc2UgeworICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCks
IHJpZ2h0LCBtaWR5ICsgMSk7CisgICAgfQorICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBw
YWludCk7CisKKyAgICBpZiAoaG92ZXJlZCkgeworICAgICAgcGFpbnQuc2V0QVJHQigyNTUsIDB4
ZjQsIDB4ZjIsIDB4ZWYpOworICAgIH0gZWxzZSB7CisgICAgICBwYWludC5zZXRBUkdCKDI1NSwg
MHhlYSwgMHhlNSwgMHhlMCk7CisgICAgfQorICAgIGlmICh2ZXJ0aWNhbCkgeworICAgICAgc2ty
ZWN0LnNldChtaWR4ICsgMSwgcmVjdC55KCksIHJpZ2h0LCBib3R0b20pOworICAgIH0gZWxzZSB7
CisgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCBtaWR5ICsgMSwgcmlnaHQsIGJvdHRvbSk7Cisg
ICAgfQorICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CisKKyAgICBwYWludC5z
ZXRBUkdCKDI1NSwgMHg5ZCwgMHg5NiwgMHg4ZSk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0
LngoKSwgcmVjdC55KCksIHJlY3QueCgpLCBib3R0b20sIHBhaW50KTsKKyAgICBjYW52YXMtPmRy
YXdMaW5lKHJpZ2h0LCByZWN0LnkoKSwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOworICAgIGNhbnZh
cy0+ZHJhd0xpbmUocmVjdC54KCksIHJlY3QueSgpLCByaWdodCwgcmVjdC55KCksIHBhaW50KTsK
KyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCBib3R0b20sIHJpZ2h0LCBib3R0b20sIHBh
aW50KTsKKworICAgIGlmIChyZWN0LmhlaWdodCgpID4gMTAgJiYgcmVjdC53aWR0aCgpID4gMTAp
IHsKKyAgICAgIHBhaW50LnNldEFSR0IoMjU1LCAweDlkLCAweDk2LCAweDhlKTsKKyAgICAgIGNh
bnZhcy0+ZHJhd0xpbmUobWlkeCAtIDEsIG1pZHksIG1pZHggKyAzLCBtaWR5LCBwYWludCk7Cisg
ICAgICBjYW52YXMtPmRyYXdMaW5lKG1pZHggLSAxLCBtaWR5IC0gMywgbWlkeCArIDMsIG1pZHkg
LSAzLCBwYWludCk7CisgICAgICBjYW52YXMtPmRyYXdMaW5lKG1pZHggLSAxLCBtaWR5ICsgMywg
bWlkeCArIDMsIG1pZHkgKyAzLCBwYWludCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKaW5kZXggODZmOTZlZS4uN2I3ZDE5NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIEZvbnRQbGF0Zm9y
bURhdGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxv
YXQgdHMgPSBtX3RleHRTaXplID4gMCA/IG1fdGV4dFNpemUgOiAxMjsKIAotICAgIHBhaW50LT5z
ZXRBbnRpQWxpYXMoZmFsc2UpOworICAgIHBhaW50LT5zZXRBbnRpQWxpYXModHJ1ZSk7CiAgICAg
cGFpbnQtPnNldFN1YnBpeGVsVGV4dChmYWxzZSk7CiAgICAgcGFpbnQtPnNldFRleHRTaXplKFNr
RmxvYXRUb1NjYWxhcih0cykpOwogICAgIHBhaW50LT5zZXRUeXBlZmFjZShtX3R5cGVmYWNlKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAppbmRleCBjNTE3YTkxLi5lMTFkZmIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC00Niwx
MCArNDYsNiBAQAogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIGRlZmluZWQo
X19saW51eF9fKQotI2luY2x1ZGUgIkdka1NraWEuaCIKLSNlbmRpZgotCiAvLyBTdGF0ZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiAvLyBFbmNhcHN1bGF0ZXMgdGhlIGFkZGl0aW9uYWwgcGFpbnRpbmcgc3Rh
dGUgaW5mb3JtYXRpb24gd2Ugc3RvcmUgZm9yIGVhY2gKQEAgLTE4MSwxOSArMTc3LDEwIEBAIFBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52
YXMqIGNhbnZhcykKIHsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1f
c3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAg
IG1fZ2Rrc2tpYSA9IG1fY2FudmFzID8gZ2RrX3NraWFfbmV3KG1fY2FudmFzKSA6IDA7Ci0jZW5k
aWYKIH0KIAogUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraWEoKQogewot
I2lmIGRlZmluZWQoT1NfTElOVVgpCi0gICAgaWYgKG1fZ2Rrc2tpYSkgewotICAgICAgICBnX29i
amVjdF91bnJlZihtX2dka3NraWEpOwotICAgICAgICBtX2dka3NraWEgPSAwOwotICAgIH0KLSNl
bmRpZgogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhza2lhOjpQbGF0
Zm9ybUNhbnZhcyogY2FudmFzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggOWUzOWRhNS4uODg1MGE2YSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oCkBAIC00Myw4ICs0Myw2IEBACiAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLXR5cGVk
ZWYgc3RydWN0IF9HZGtEcmF3YWJsZSBHZGtTa2lhOwotCiAvLyBUaGlzIGNsYXNzIGhvbGRzIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGF0ZSBmb3IgR3JhcGhpY3NDb250ZXh0LiBXZSBwdXQKIC8v
IG1vc3Qgb2Ygb3VyIFNraWEgd3JhcHBlcnMgb24gdGhpcyBjbGFzcy4gSW4gdGhlb3J5LCBhIGxv
dCBvZiB0aGlzIHN0dWZmIGNvdWxkCiAvLyBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHQgZGly
ZWN0bHksIGV4Y2VwdCB0aGF0IHNvbWUgY29kZSBleHRlcm5hbCB0byB0aGlzCkBAIC0xNjcsMTEg
KzE2NSw2IEBAIHB1YmxpYzoKICAgICAvLyBwb3NzaWJsZSBxdWFsaXR5LgogICAgIGJvb2wgaXNQ
cmludGluZygpOwogCi0jaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gICAgLy8gRklYTUU6IHNob3Vs
ZCBiZSBjYW1lbENhc2UuCi0gICAgR2RrU2tpYSogZ2RrX3NraWEoKSBjb25zdCB7IHJldHVybiBt
X2dka3NraWE7IH0KLSNlbmRpZgotCiBwcml2YXRlOgogI2lmIGRlZmluZWQoX19saW51eF9fKSB8
fCBQTEFURk9STShXSU5fT1MpCiAgICAgLy8gVXNlZCB3aGVuIHJlc3RvcmluZyBhbmQgdGhlIHN0
YXRlIGhhcyBhbiBpbWFnZSBjbGlwLiBPbmx5IHNob3dzIHRoZSBwaXhlbHMgaW4KQEAgLTE5NSwx
MSArMTg4LDYgQEAgcHJpdmF0ZToKICAgICAvLyBDdXJyZW50IHBhdGggaW4gZ2xvYmFsIGNvb3Jk
aW5hdGVzLgogICAgIFNrUGF0aCBtX3BhdGg7CiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSAg
ICAvLyBBIHBvaW50ZXIgdG8gYSBHREsgRHJhd2FibGUgd3JhcHBpbmcgb2YgdGhpcyBTa2lhIGNh
bnZhcwotICAgIEdka1NraWEqIG1fZ2Rrc2tpYTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lO
X09TKQogICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjIwY2UwNy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzMiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtR3RrLmgiCi0K
LSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgImd0a2RyYXdp
bmcuaCIKLSNpbmNsdWRlICJHZGtTa2lhLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSA8Z2Rr
L2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gUGFkZGluZ1R5cGUgewotICAg
IFRvcFBhZGRpbmcsCi0gICAgUmlnaHRQYWRkaW5nLAotICAgIEJvdHRvbVBhZGRpbmcsCi0gICAg
TGVmdFBhZGRpbmcKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkTWVudUxpc3RJbnRlcm5h
bFBhZGRpbmdbNF0gPSB7IDEsIDQsIDEsIDQgfTsKLQotLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUt
d2lkdGggZm9udCBzaXplLiAgV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAotLy8gc2l6
ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhl
biBzaHJpbmspIGZvcgotLy8gZm9ybSBjb250cm9sIGZvbnRzLgotc3RhdGljIGZsb2F0IERlZmF1
bHRGb250U2l6ZSA9IDE2LjA7Ci0KLXN0YXRpYyBDb2xvciBtYWtlQ29sb3IoY29uc3QgR2RrQ29s
b3ImIGMpCi17Ci0gICAgcmV0dXJuIENvbG9yKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+
PiA4LCBjLmJsdWUgPj4gOCkpOwotfQotCi0vLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KLS8v
IC1JRSB1c2VzIGEgZm9udCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9u
dCBmb3IgZm9ybSBjb250cm9scy4KLS8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFs
bHkgY2FsbHMgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCi0vLyB3aGljaCByZXR1
cm5zIE1TIFNoZWxsIERsZykKLS8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgotLy8KLS8v
IEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMg
Zm9yIEFOU0kgZW5jb2RpbmdzLgotLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNo
IHdlIHJlbmRlciBpbmNvcnJlY3RseSBhdCBjZXJ0YWluIHBpeGVsCi0vLyBzaXplcyAoZS5nLiAx
NXB4KS4gU28sIGZvciBub3cgd2UganVzdCB1c2UgQXJpYWwuCi1zdGF0aWMgY29uc3QgY2hhciog
ZGVmYXVsdEdVSUZvbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiAiQXJpYWwi
OwotfQotCi0vLyBDb252ZXJ0cyBwb2ludHMgdG8gcGl4ZWxzLiAgT25lIHBvaW50IGlzIDEvNzIg
b2YgYW4gaW5jaC4KLXN0YXRpYyBmbG9hdCBwb2ludHNUb1BpeGVscyhmbG9hdCBwb2ludHMpCi17
Ci0gICAgc3RhdGljIGZsb2F0IHBpeGVsc1BlckluY2ggPSAwLjBmOwotICAgIGlmICghcGl4ZWxz
UGVySW5jaCkgewotICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2Rl
ZmF1bHQoKTsKLSAgICAgICAgLy8gRklYTUU6ICBJJ20gZ2V0dGluZyBmbG9hdGluZyBwb2ludCB2
YWx1ZXMgb2Ygfjc1IGFuZCB+MTAwLAotICAgICAgICAvLyBhbmQgaXQncyBtYWtpbmcgbXkgZm9u
dHMgbG9vayBhbGwgd3JvbmcuICBGaWd1cmUgdGhpcyBvdXQuCi0jaWYgMAotICAgICAgICBpZiAo
c2NyZWVuKQotICAgICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IGdka19zY3JlZW5fZ2V0X3Jlc29s
dXRpb24oc2NyZWVuKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBwaXhlbHNQ
ZXJJbmNoID0gOTYuMGY7IC8vIE1hdGNoIHRoZSBkZWZhdWx0IHdlIHNldCBvbiBXaW5kb3dzLgot
ICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0g
ICAgcmV0dXJuIHBvaW50cyAvIHBvaW50c1BlckluY2ggKiBwaXhlbHNQZXJJbmNoOwotfQotCi1z
dGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkK
LSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0g
ICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotc3RhdGljIGJvb2wgc3VwcG9y
dHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBwZWFyYW5j
ZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAg
IGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNl
YXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFJhZGlvUGFy
dDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIEd0a1RleHRE
aXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgUlRMOgotICAgICAgICByZXR1cm4gR1RL
X1RFWFRfRElSX1JUTDsKLSAgICBjYXNlIExUUjoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJ
Ul9MVFI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9OT05FOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0TW96U3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBH
dGtXaWRnZXRTdGF0ZSogc3RhdGUsIFJlbmRlck9iamVjdCogbykKLXsKLSAgICBzdGF0ZS0+YWN0
aXZlID0gdGhlbWUtPmlzUHJlc3NlZChvKTsKLSAgICBzdGF0ZS0+Zm9jdXNlZCA9IHRoZW1lLT5p
c0ZvY3VzZWQobyk7Ci0gICAgc3RhdGUtPmluSG92ZXIgPSB0aGVtZS0+aXNIb3ZlcmVkKG8pOwot
ICAgIC8vIEZJWE1FOiBEaXNhYmxlZCBkb2VzIG5vdCBhbHdheXMgZ2l2ZSB0aGUgY29ycmVjdCBh
cHBlYXJhbmNlIGZvciBSZWFkT25seQotICAgIHN0YXRlLT5kaXNhYmxlZCA9ICF0aGVtZS0+aXNF
bmFibGVkKG8pIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvKTsKLSAgICBzdGF0ZS0+aXNE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgc3RhdGUtPmNhbkRlZmF1bHQgPSBmYWxzZTsKLSAgICBzdGF0
ZS0+ZGVwcmVzc2VkID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIHBhaW50TW96V2lkZ2V0KFJl
bmRlclRoZW1lKiB0aGVtZSwgR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVzdCBjbGFpbSB0byBoYXZlIHN1
Y2NlZWRlZAotICAgIGlmIChpLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR3RrV2lkZ2V0U3RhdGUgbW96U3RhdGU7Ci0gICAgc2V0TW96
U3RhdGUodGhlbWUsICZtb3pTdGF0ZSwgbyk7Ci0KLSAgICBpbnQgZmxhZ3M7Ci0KLSAgICAvLyBX
ZSBtaWdodCB3YW50IHRvIG1ha2Ugc2V0dGluZyBmbGFncyB0aGUgY2FsbGVyJ3Mgam9iIGF0IHNv
bWUgcG9pbnQgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaGVyZS4KLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIE1PWl9HVEtfQlVUVE9OOgotICAgICAgICBmbGFncyA9IEdUS19SRUxJRUZfTk9S
TUFMOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfQ0hFQ0tCVVRUT046Ci0gICAg
Y2FzZSBNT1pfR1RLX1JBRElPQlVUVE9OOgotICAgICAgICBmbGFncyA9IHRoZW1lLT5pc0NoZWNr
ZWQobyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZsYWdzID0gMDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzID0g
aS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGNz
LT5jYW52YXMoKTsKLSAgICBpZiAoIWNhbnZhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgR2RrUmVjdGFuZ2xlIGdka1JlY3Q7Ci0gICAgZ2RrUmVjdC54ID0gcmVjdC54KCk7Ci0gICAg
Z2RrUmVjdC55ID0gcmVjdC55KCk7Ci0gICAgZ2RrUmVjdC53aWR0aCA9IHJlY3Qud2lkdGgoKTsK
LSAgICBnZGtSZWN0LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAvLyBnZXRUb3RhbENs
aXAgcmV0dXJucyB0aGUgY3VycmVudGx5IHNldCBjbGlwIHJlZ2lvbiBpbiBkZXZpY2UgY29vcmRp
bmF0ZXMsCi0gICAgLy8gc28gd2UgaGF2ZSB0byBhcHBseSB0aGUgY3VycmVudCB0cmFuc2Zvcm0g
KGFjdHVhbGx5IHdlIG9ubHkgc3VwcG9ydCB0cmFuc2xhdGlvbnMpCi0gICAgLy8gdG8gZ2V0IHRo
ZSBwYWdlIGNvb3JkaW5hdGVzIHRoYXQgb3VyIGd0ayB3aWRnZXQgcmVuZGVyaW5nIGV4cGVjdHMu
Ci0gICAgLy8gV2UgaW52ZXJ0IGl0IGJlY2F1c2Ugd2Ugd2FudCB0byBtYXAgZnJvbSBkZXZpY2Ug
Y29vcmRpbmF0ZXMgdG8gcGFnZSBjb29yZGluYXRlcy4KLSAgICBjb25zdCBTa0lSZWN0IGNsaXBS
ZWdpb24gPSBjYW52YXMtPmdldFRvdGFsQ2xpcCgpLmdldEJvdW5kcygpOwotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGN0bSA9IGkuY29udGV4dC0+Z2V0Q1RNKCkuaW52ZXJzZSgpOwotICAgIElu
dFBvaW50IHBvcyA9IGN0bS5tYXBQb2ludChJbnRQb2ludChTa1NjYWxhclJvdW5kKGNsaXBSZWdp
b24uZkxlZnQpLCBTa1NjYWxhclJvdW5kKGNsaXBSZWdpb24uZlRvcCkpKTsKLSAgICBHZGtSZWN0
YW5nbGUgZ2RrQ2xpcFJlY3Q7Ci0gICAgZ2RrQ2xpcFJlY3QueCA9IHBvcy54KCk7Ci0gICAgZ2Rr
Q2xpcFJlY3QueSA9IHBvcy55KCk7Ci0gICAgZ2RrQ2xpcFJlY3Qud2lkdGggPSBjbGlwUmVnaW9u
LndpZHRoKCk7Ci0gICAgZ2RrQ2xpcFJlY3QuaGVpZ2h0ID0gY2xpcFJlZ2lvbi5oZWlnaHQoKTsK
LQotICAgIC8vIG1vel9ndGtfd2lkZ2V0X3BhaW50IHdpbGwgcGFpbnQgb3V0c2lkZSB0aGUgYm91
bmRzIG9mIGdka1JlY3QgdW5sZXNzIHdlIGZ1cnRoZXIgcmVzdHJpY3QgfGdka0NsaXBSZWN0fC4K
LSAgICBnZGtfcmVjdGFuZ2xlX2ludGVyc2VjdCgmZ2RrUmVjdCwgJmdka0NsaXBSZWN0LCAmZ2Rr
Q2xpcFJlY3QpOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBndGtUZXh0RGly
ZWN0aW9uKG8tPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKLQotICAgIHJldHVybiBtb3pfZ3RrX3dp
ZGdldF9wYWludCh0eXBlLCBwY3MtPmdka19za2lhKCksICZnZGtSZWN0LCAmZ2RrQ2xpcFJlY3Qs
ICZtb3pTdGF0ZSwgZmxhZ3MsIGRpcmVjdGlvbikgIT0gTU9aX0dUS19TVUNDRVNTOwotfQotCi1z
dGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHls
ZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKLXsKLSAgICAvLyBGSVhNRTog
TWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkgdGltZXMgZm9y
IGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KLSAgICByZW5kZXJUaGVtZS0+cGxh
dGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotc3RhdGljIGRvdWJsZSBxdWVyeVN5c3RlbUJs
aW5rSW50ZXJ2YWwoZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkKLXsKLSAgICBHdGtTZXR0aW5ncyog
c2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLQotICAgIGdib29sZWFuIHNo
b3VsZEJsaW5rOwotICAgIGdpbnQgdGltZTsKLQotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywg
Imd0ay1jdXJzb3ItYmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJsaW5rLXRpbWUi
LCAmdGltZSwgTlVMTCk7Ci0KLSAgICBpZiAoIXNob3VsZEJsaW5rKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiB0aW1lIC8gMTAwMC4wOwotfQotCi0vLyBJbXBsZW1lbnQgV2ViQ29y
ZTo6dGhlbWUoKSBmb3IgZ2V0dGluZyB0aGUgZ2xvYmFsIFJlbmRlclRoZW1lLgotUmVuZGVyVGhl
bWUqIHRoZW1lKCkKLXsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWVDaHJvbWl1bUd0ayBndGtUaGVt
ZTsKLSAgICByZXR1cm4gJmd0a1RoZW1lOwotfQotCi1SZW5kZXJUaGVtZUNocm9taXVtR3RrOjpS
ZW5kZXJUaGVtZUNocm9taXVtR3RrKCkKLSAgICA6IG1fZ3RrV2luZG93KDApCi0gICAgLCBtX2d0
a0NvbnRhaW5lcigwKQotICAgICwgbV9ndGtFbnRyeSgwKQotICAgICwgbV9ndGtUcmVlVmlldygw
KQotewotfQotCi0vLyBVc2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRzIHRvIG1hdGNoIHRoZWly
IG1ldHJpY3MuCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6ZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLQotU3RyaW5nIFJl
bmRlclRoZW1lQ2hyb21pdW1HdGs6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZyh0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVt
ZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7Ci19
Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0Vu
dHJ5KCk7Ci0gICAgcmV0dXJuIG1ha2VDb2xvcih3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFU
RV9TRUxFQ1RFRF0pOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwbGF0Zm9y
bUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIG1ha2VDb2xvcih3aWRnZXQtPnN0
eWxlLT5iYXNlW0dUS19TVEFURV9BQ1RJVkVdKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAot
ewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLSAgICByZXR1cm4gbWFrZUNv
bG9yKHdpZGdldC0+c3R5bGUtPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXSk7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsK
LSAgICByZXR1cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPnRleHRbR1RLX1NUQVRFX0FDVElW
RV0pOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwbGF0Zm9ybVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAx
NTApOwotfQotCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6Y2FyZXRCbGlua0ludGVy
dmFsKCkgY29uc3QKLXsKLSAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBsYXlv
dXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCi0gICAgLy8gYSByYWNlIGNvbmRpdGlvbiBm
b3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCi0gICAgaWYgKENocm9taXVtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFdlIGNh
Y2hlIHRoZSBpbnRlcnZhbCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcmVxdWVzdCBp
dCBmcm9tIGd0ay4KLSAgICBzdGF0aWMgZG91YmxlIGJsaW5rSW50ZXJ2YWwgPSBxdWVyeVN5c3Rl
bUJsaW5rSW50ZXJ2YWwoUmVuZGVyVGhlbWU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpKTsKLSAgICBy
ZXR1cm4gYmxpbmtJbnRlcnZhbDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpz
eXN0ZW1Gb250KGludCBwcm9wSWQsIERvY3VtZW50KiBkb2N1bWVudCwgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgY29uc3QgY2hhciogZmFjZU5hbWUgPSAw
OwotICAgIGZsb2F0IGZvbnRTaXplID0gMDsKLSAgICAvLyBGSVhNRTogc2VlIGFsc28gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi5jcHAKLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgQ1NT
VmFsdWVNZW51OgotICAgIGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6Ci0gICAgY2FzZSBDU1NWYWx1
ZVNtYWxsQ2FwdGlvbjoKLSAgICAgICAgLy8gdHJpZ2dlcmVkIGJ5IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2NzczItc3lzdGVtLWZvbnRzLmh0bWwKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgotICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENv
bnRyb2w6Ci0gICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoZG9jdW1lbnQpOwotICAg
ICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gIEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28g
ZG9lcy4KLSAgICAgICAgZm9udFNpemUgPSBEZWZhdWx0Rm9udFNpemUgLSBwb2ludHNUb1BpeGVs
cygyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZmFjZU5hbWUgPSBk
ZWZhdWx0R1VJRm9udChkb2N1bWVudCk7Ci0gICAgICAgIGZvbnRTaXplID0gRGVmYXVsdEZvbnRT
aXplOwotICAgIH0KLQotICAgIC8vIE9ubHkgdXBkYXRlIGlmIHRoZSBzaXplIG1ha2VzIHNlbnNl
LgotICAgIGlmIChmb250U2l6ZSA+IDApIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuc2V0RmFtaWx5KGZhY2VOYW1lKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoZm9udFNpemUpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
SXRhbGljKGZhbHNlKTsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpt
aW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtf
Q0hFQ0tCVVRUT04sIG8sIGksIHJlY3QpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1H
dGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8g
SWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUg
bm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3cm9u
ZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZpcmVmb3guCi0gICAgLy8gQXQg
ZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVyeWluZyB0aGUgdGhlbWUgZ2l2
ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IKLSAgICAvLyB0aGUgaGlnaGVy
IERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90aGVy
IHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MKLSAgICAvLyBtZXRyaWNzLgot
ICAgIGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOwotICAgIHNldFNpemVJZkF1dG8oc3R5bGUs
IHNpemUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50UmFkaW8oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9aX0dUS19S
QURJT0JVVFRPTiwgbywgaSwgcmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0
azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBVc2Ug
c2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KLSAgICBzZXRDaGVja2JveFNp
emUoc3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9H
VEtfQlVUVE9OLCBvLCBpLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3Rr
OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1veldp
ZGdldCh0aGlzLCBNT1pfR1RLX0VOVFJZLCBvLCBpLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtR3RrOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
cmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHJlY3QpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1HdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0NIRUNLTUVO
VUlURU0sIG8sIGksIHJlY3QpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJu
IHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfRFJPUERPV05fQVJST1csIG8sIGksIHJlY3Qp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhp
cywgTU9aX0dUS19DSEVDS01FTlVJVEVNLCBvLCBpLCByZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Ci17
Ci0gICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvIG9uIGFsbCBicm93c2Vycy4KLSAgICBz
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0RST1BET1dO
LCBvLCBpLCByZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRqdXN0TWVudUxpc3RTdHlsZShz
ZWxlY3Rvciwgc3R5bGUsIGUpOwotfQotCi0vLyBVc2VkIHRvIHBhaW50IHN0eWxlZCBtZW51bGlz
dHMgKGkuZS4gd2l0aCBhIG5vbi1kZWZhdWx0IGJvcmRlcikKLWJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBw
YWludE1lbnVMaXN0KG8sIGksIHIpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIExlZnRQYWRkaW5nKTsKLX0K
LQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFs
UGFkZGluZyhzdHlsZSwgUmlnaHRQYWRkaW5nKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21p
dW1HdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIFRvcFBhZGRpbmcp
OwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdC
b3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdElu
dGVybmFsUGFkZGluZyhzdHlsZSwgQm90dG9tUGFkZGluZyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bUd0azo6YWRqdXN0QnV0dG9uSW5uZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBpbm5lciBwYWRkaW5nIG1hdGNoZXMgRmlyZWZveC4KLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
UGFkZGluZ1JpZ2h0KExlbmd0aCgzLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aCgxLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgo
MywgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpjb250cm9sU3Vw
cG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlz
RW5hYmxlZChvKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6YWN0aXZlTGlz
dEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3
aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5zdHls
ZS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17
Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBtYWtl
Q29sb3Iod2lkZ2V0LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVfU0VMRUNURURdKTsKLX0KLQotQ29s
b3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3
KCk7Ci0gICAgcmV0dXJuIG1ha2VDb2xvcih3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFURV9B
Q1RJVkVdKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6aW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdp
ZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAgcmV0dXJuIG1ha2VDb2xvcih3aWRnZXQtPnN0eWxl
LT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdKTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUNo
cm9taXVtR3RrOjpndGtFbnRyeSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrRW50cnkpCi0gICAg
ICAgIHJldHVybiBtX2d0a0VudHJ5OwotCi0gICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXco
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZ3RrRW50cnksICJzdHlsZS1zZXQiLCBHX0NBTExC
QUNLKGd0a1N0eWxlU2V0Q2FsbGJhY2spLCB0aGVtZSgpKTsKLSAgICBndGtfY29udGFpbmVyX2Fk
ZChndGtDb250YWluZXIoKSwgbV9ndGtFbnRyeSk7Ci0gICAgZ3RrX3dpZGdldF9yZWFsaXplKG1f
Z3RrRW50cnkpOwotCi0gICAgcmV0dXJuIG1fZ3RrRW50cnk7Ci19Ci0KLUd0a1dpZGdldCogUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6Z3RrVHJlZVZpZXcoKSBjb25zdAotewotICAgIGlmIChtX2d0
a1RyZWVWaWV3KQotICAgICAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLQotICAgIG1fZ3RrVHJl
ZVZpZXcgPSBndGtfdHJlZV92aWV3X25ldygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtU
cmVlVmlldywgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRo
ZW1lKCkpOwotICAgIGd0a19jb250YWluZXJfYWRkKGd0a0NvbnRhaW5lcigpLCBtX2d0a1RyZWVW
aWV3KTsKLSAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtUcmVlVmlldyk7Ci0KLSAgICByZXR1
cm4gbV9ndGtUcmVlVmlldzsKLX0KLQotR3RrQ29udGFpbmVyKiBSZW5kZXJUaGVtZUNocm9taXVt
R3RrOjpndGtDb250YWluZXIoKSBjb25zdAotewotICAgIGlmIChtX2d0a0NvbnRhaW5lcikKLSAg
ICAgICAgcmV0dXJuIG1fZ3RrQ29udGFpbmVyOwotCi0gICAgbV9ndGtXaW5kb3cgPSBndGtfd2lu
ZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBtX2d0a0NvbnRhaW5lciA9IEdUS19DT05U
QUlORVIoZ3RrX2ZpeGVkX25ldygpKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKG1fZ3RrV2luZG93KSwgR1RLX1dJREdFVChtX2d0a0NvbnRhaW5lcikpOwotICAgIGd0a193
aWRnZXRfcmVhbGl6ZShtX2d0a1dpbmRvdyk7Ci0KLSAgICByZXR1cm4gbV9ndGtDb250YWluZXI7
Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjptZW51TGlzdEludGVybmFsUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKLXsKLSAgICAvLyBU
aGlzIGludGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzZXItc3VwcGxpZWQg
cGFkZGluZy4KLSAgICAvLyBNYXRjaGVzIHRoZSBGRiBiZWhhdmlvci4KLSAgICBpbnQgcGFkZGlu
ZyA9IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nW3BhZGRpbmdUeXBlXTsKLQotICAgIC8v
IFJlc2VydmUgdGhlIHNwYWNlIGZvciByaWdodCBhcnJvdyBoZXJlLiBUaGUgcmVzdCBvZiB0aGUg
cGFkZGluZyBpcwotICAgIC8vIHNldCBieSBhZGp1c3RNZW51TGlzdFN0eWxlLCBzaW5jZSBQb3BN
ZW51V2luLmNwcCB1c2VzIHRoZSBwYWRkaW5nIGZyb20KLSAgICAvLyBSZW5kZXJNZW51TGlzdCB0
byBsYXkgb3V0IHRoZSBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoZSBwb3B1cC4KLSAgICAvLyBJZiB0
aGUgTWVudUxpc3QgYWN0dWFsbHkgaGFzIGFwcGVhcmFuY2UgIk5vQXBwZWFyYW5jZSIsIHRoZW4g
dGhhdCBtZWFucwotICAgIC8vIHdlIGRvbid0IGRyYXcgYSBidXR0b24sIHNvIGRvbid0IHJlc2Vy
dmUgc3BhY2UgZm9yIGl0LgotICAgIGNvbnN0IGludCBiYXJfdHlwZSA9IHN0eWxlLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyBSaWdodFBhZGRpbmcgOiBMZWZ0UGFkZGluZzsKLSAgICBpZiAocGFkZGlu
Z1R5cGUgPT0gYmFyX3R5cGUgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0
KQotICAgICAgICBwYWRkaW5nICs9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3Jv
bGxiYXJUaGlja25lc3MoKTsKLQotICAgIHJldHVybiBwYWRkaW5nOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtR3RrLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDkyN2YuLjAwMDAwMDAKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTM2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBHb29nbGUsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1HdGtfaAotI2RlZmluZSBSZW5kZXJUaGVtZUNocm9t
aXVtR3RrX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21p
dW1HdGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVuZGVy
VGhlbWVDaHJvbWl1bUd0aygpOwotICAgICAgICB+UmVuZGVyVGhlbWVDaHJvbWl1bUd0aygpIHsg
fQotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKLSAg
ICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7Ci0KLSAgICAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUg
YWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAg
ICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhl
IGZvY3VzIHJpbmcuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgICAgIC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rp
b24gY29sb3IuCi0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5r
SW50ZXJ2YWwoKSBjb25zdDsKLQotICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIERvY3VtZW50KiwgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9Ci0K
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LQotICAgICAgICAvLyBNZW51TGlzdCByZWZlcnMgdG8gYW4gdW5zdHlsZWQgbWVudWxpc3QgKG1l
YW5pbmcgYSBtZW51bGlzdCB3aXRob3V0Ci0gICAgICAgIC8vIGJhY2tncm91bmQtY29sb3Igb3Ig
Ym9yZGVyIHNldCkgYW5kIE1lbnVMaXN0QnV0dG9uIHJlZmVycyB0byBhIHN0eWxlZAotICAgICAg
ICAvLyBtZW51bGlzdCAoYSBtZW51bGlzdCB3aXRoIGJhY2tncm91bmQtY29sb3Igb3IgYm9yZGVy
IHNldCkuIFRoZXkgaGF2ZQotICAgICAgICAvLyB0aGlzIGRpc3RpbmN0aW9uIHRvIHN1cHBvcnQg
c2hvd2luZyBhcXVhIHN0eWxlIHRoZW1lcyB3aGVuZXZlciB0aGV5Ci0gICAgICAgIC8vIHBvc3Np
Ymx5IGNhbiwgd2hpY2ggaXMgc29tZXRoaW5nIHdlIGRvbid0IHdhbnQgdG8gcmVwbGljYXRlLgot
ICAgICAgICAvLwotICAgICAgICAvLyBJbiBzaG9ydCwgd2UgZWl0aGVyIGdvIGRvd24gdGhlIE1l
bnVMaXN0IGNvZGUgcGF0aCBvciB0aGUgTWVudUxpc3RCdXR0b24KLSAgICAgICAgLy8gY29kZXBh
dGguIFdlIG5ldmVyIGdvIGRvd24gYm90aC4gQW5kIGluIGJvdGggY2FzZXMsIHRoZXkgcmVuZGVy
IHRoZQotICAgICAgICAvLyBlbnRpcmUgbWVudWxpc3QuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9k
cyBkZWZpbmUgdGhlIHBhZGRpbmcgZm9yIHRoZSBNZW51TGlzdCdzIGlubmVyIGJsb2NrLgotICAg
ICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5k
ZXJTdHlsZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVy
bmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RCdXR0b25Jbm5lclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7Ci0K
LSAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRp
bnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQotICAg
ICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlz
IHN1cHBvcnRlZCBhdCBhbGwuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICAvLyBMaXN0IEJveCBzZWxl
Y3Rpb24gY29sb3IKLSAgICAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENv
bG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gSG9sZCB0aGUgc3RhdGUKLSAg
ICAgICAgR3RrV2lkZ2V0KiBndGtFbnRyeSgpIGNvbnN0OwotICAgICAgICBHdGtXaWRnZXQqIGd0
a1RyZWVWaWV3KCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gVW5tYXBwZWQgR2RrV2luZG93IGhhdmlu
ZyBhIGNvbnRhaW5lci4gVGhpcyBpcyBob2xkaW5nIGFsbCBvdXIgZmFrZSB3aWRnZXRzCi0gICAg
ICAgIEd0a0NvbnRhaW5lciogZ3RrQ29udGFpbmVyKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQgcGFk
ZGluZ1R5cGUpIGNvbnN0OwotCi0gICAgICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1dpbmRv
dzsKLSAgICAgICAgbXV0YWJsZSBHdGtDb250YWluZXIqIG1fZ3RrQ29udGFpbmVyOwotICAgICAg
ICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtFbnRyeTsKLSAgICAgICAgbXV0YWJsZSBHdGtXaWRn
ZXQqIG1fZ3RrVHJlZVZpZXc7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDM4NDgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCkBA
IC0wLDAgKzEsMzkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9t
aXVtTGludXguaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRlICJTa1NoYWRlci5oIgorI2lu
Y2x1ZGUgIlNrR3JhZGllbnRTaGFkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IFBhZGRpbmdUeXBlIHsKKyAgICBUb3BQYWRkaW5nLAorICAgIFJpZ2h0UGFkZGluZywKKyAgICBC
b3R0b21QYWRkaW5nLAorICAgIExlZnRQYWRkaW5nCit9OworCitzdGF0aWMgY29uc3QgaW50IHN0
eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCAxNiwgMSwgNCB9OworCitzdGF0
aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCit7CisgICAgLy8g
VGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdzIGZvciB1cy4KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHNldFNpemVJZkF1dG8oUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworfQor
CisvLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KKy8vIC1JRSB1c2VzIGEgZm9udCBiYXNlZCBv
biB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3IgZm9ybSBjb250cm9scy4KKy8v
IC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0U3RvY2tPYmplY3Qo
REVGQVVMVF9HVUlfRk9OVCksCisvLyB3aGljaCByZXR1cm5zIE1TIFNoZWxsIERsZykKKy8vIC1T
YWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgorLy8KKy8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdo
ZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFOU0kgZW5jb2RpbmdzLgorLy8g
SUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJlbmRlciBpbmNvcnJlY3RseSBh
dCBjZXJ0YWluIHBpeGVsCisvLyBzaXplcyAoZS5nLiAxNXB4KS4gU28sIGZvciBub3cgd2UganVz
dCB1c2UgQXJpYWwuCitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdEdVSUZvbnQoRG9jdW1lbnQq
IGRvY3VtZW50KQoreworICAgIHJldHVybiAiQXJpYWwiOworfQorCitSZW5kZXJUaGVtZSogdGhl
bWUoKQoreworICAgIHN0YXRpYyBSZW5kZXJUaGVtZUNocm9taXVtTGludXggdGhlbWU7CisgICAg
cmV0dXJuICZ0aGVtZTsKK30KKworUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVt
ZUNocm9taXVtTGludXgoKQoreworfQorCisvLyBVc2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRz
IHRvIG1hdGNoIHRoZWlyIG1ldHJpY3MuCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2lu
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkp
OworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJrc1N0eWxl
U2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHls
ZVNoZWV0LCBzaXplb2YodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5
bGUtPmFwcGVhcmFuY2UoKSk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBDb2xvcigweDFlLCAweDkwLCAweGZmKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMjAwLCAyMDAsIDIwMCk7Cit9CisKK0NvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigwLCAwLCAwKTsKK30KKworQ29sb3IgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoNTAsIDUwLCA1MCk7Cit9CisKK0Nv
bG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMTUwKTsKK30KKwor
ZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29u
c3QKK3sKKyAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBsYXlvdXQgdGVzdCBt
b2RlLCBhcyBpdCBpbnRyb2R1Y2VzCisgICAgLy8gYSByYWNlIGNvbmRpdGlvbiBmb3IgdGhlIHBp
eGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCisgICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlv
dXRUZXN0TW9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFdlIGNhY2hlIHRoZSBp
bnRlcnZhbCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcmVxdWVzdCBpdCBmcm9tIGd0
ay4KKyAgICByZXR1cm4gMC41OworfQorCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
c3lzdGVtRm9udChpbnQgcHJvcElkLCBEb2N1bWVudCogZG9jdW1lbnQsIEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1p
bHkoKS5zZXRGYW1pbHkoZGVmYXVsdEdVSUZvbnQoTlVMTCkpOworICBmb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZSgxMik7CisgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKKyAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpOb0ZhbWlseSk7CisgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5v
cm1hbCk7CisgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOworfQorCitpbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBzdGF0aWMgSW1h
Z2UqIGNvbnN0IGNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGlu
dXhDaGVja2JveE9uIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5j
aGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4Q2hlY2tib3hP
ZmYiKS5yZWxlYXNlUmVmKCk7CisKKyAgICBJbWFnZSogaW1hZ2UgPSB0aGlzLT5pc0NoZWNrZWQo
bykgPyBjaGVja2VkSW1hZ2UgOiB1bmNoZWNrZWRJbWFnZTsKKyAgICBpLmNvbnRleHQtPmRyYXdJ
bWFnZShpbWFnZSwgcmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3sKKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQu
ICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkKKyAgICAvLyBmb3Igbm93LiAgSXQgbWF0Y2hl
cyBGaXJlZm94LiAgQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLAorICAgIC8v
IHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRz
IGZvciB0aGUgaGlnaGVyCisgICAgLy8gRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9u
b3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UKKyAgICAvLyBjYW4ndCByZWx5IG9u
IHRoZSB0aGVtZSdzIG1ldHJpY3MuCisgICAgY29uc3QgSW50U2l6ZSBzaXplKDEzLCAxMyk7Cisg
ICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6ZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIEltYWdl
KiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4
UmFkaW9PbiIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tl
ZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT2ZmIikucmVs
ZWFzZVJlZigpOworCisgICAgSW1hZ2UqIGltYWdlID0gdGhpcy0+aXNDaGVja2VkKG8pID8gY2hl
Y2tlZEltYWdlIDogdW5jaGVja2VkSW1hZ2U7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2UsIHJlY3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAg
Ly8gVXNlIHNhbWUgc2l6aW5nIGZvciByYWRpbyBib3ggYXMgY2hlY2tib3guCisgICAgc2V0Q2hl
Y2tib3hTaXplKHN0eWxlKTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRCdXR0b25MaWtlKFJlbmRl
clRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkgeworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52
YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBTa1BhaW50
IHBhaW50OworICAgIFNrUmVjdCBza3JlY3Q7CisgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54
KCkgKyByZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKTsKKworICAgIC8vIElmIHRoZSBidXR0b24gaXMgdG9vIHNtYWxsLCBmYWxsYmFj
ayB0byBkcmF3aW5nIGEgc2luZ2xlLCBzb2xpZCBjb2xvcgorICAgIGlmIChyZWN0LndpZHRoKCkg
PCA1IHx8IHJlY3QuaGVpZ2h0KCkgPCA1KSB7CisgICAgICAgIHBhaW50LnNldEFSR0IoMjU1LCAw
eGU5LCAweGU5LCAweGU5KTsKKyAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCks
IHJpZ2h0LCBib3R0b20pOworICAgICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgaW50IGJvcmRlckFscGhhID0g
dGhlbWUtPmlzSG92ZXJlZChvKSA/IDB4ODAgOiAweDU1OworICAgIHBhaW50LnNldEFSR0IoYm9y
ZGVyQWxwaGEsIDAsIDAsIDApOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBy
ZWN0LnkoKSwgcmlnaHQgLSAxLCByZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xp
bmUocmlnaHQgLSAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQp
OworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBib3R0b20gLSAxLCByaWdodCAt
IDEsIGJvdHRvbSAtIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCBy
ZWN0LnkoKSArIDEsIHJlY3QueCgpLCBib3R0b20gLSAxLCBwYWludCk7CisKKyAgICBwYWludC5z
ZXRBUkdCKDI1NSwgMCwgMCwgMCk7CisgICAgU2tQb2ludCBwWzJdOworICAgIGNvbnN0IGludCBs
aWdodEVuZCA9IHRoZW1lLT5pc1ByZXNzZWQobykgPyAxIDogMDsKKyAgICBjb25zdCBpbnQgZGFy
a0VuZCA9ICFsaWdodEVuZDsKKyAgICBwW2xpZ2h0RW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0
LngoKSksIFNrSW50VG9TY2FsYXIocmVjdC55KCkpKTsKKyAgICBwW2RhcmtFbmRdLnNldChTa0lu
dFRvU2NhbGFyKHJlY3QueCgpKSwgU2tJbnRUb1NjYWxhcihib3R0b20gLSAxKSk7CisgICAgU2tD
b2xvciBjb2xvcnNbMl07CisgICAgY29sb3JzWzBdID0gU2tDb2xvclNldEFSR0IoMjU1LCAweGY4
LCAweGY4LCAweGY4KTsKKyAgICBjb2xvcnNbMV0gPSBTa0NvbG9yU2V0QVJHQigyNTUsIDB4ZGQs
IDB4ZGQsIDB4ZGQpOworCisgICAgU2tTaGFkZXIqIHMgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVh
dGVMaW5lYXIoCisgICAgICAgIHAsIGNvbG9ycywgTlVMTCwgMiwgU2tTaGFkZXI6OmtDbGFtcF9U
aWxlTW9kZSwgTlVMTCk7CisgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUp
OworICAgIHBhaW50LnNldFNoYWRlcihzKTsKKyAgICBzLT51bnJlZigpOworCisgICAgc2tyZWN0
LnNldChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsK
KyAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0U2hh
ZGVyKE5VTEwpOworICAgIHBhaW50LnNldEFSR0IoMjU1LCAweGNlLCAweGNlLCAweGNlKTsKKyAg
ICBjYW52YXMtPmRyYXdQb2ludChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwgcGFpbnQpOwor
ICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgcmVjdC55KCkgKyAxLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCBib3R0b20gLSAyLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3UG9pbnQocmlnaHQgLSAyLCBib3R0b20gLSAyLCBwYWludCk7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRleHRGaWVs
ZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25z
dAoreworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3NlcnMuCisg
ICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlzdChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgbWlkZGxlID0gcmVjdC55KCkgKyByZWN0
LmhlaWdodCgpIC8gMjsKKworICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsK
KworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgcGFpbnQuc2V0QVJHQigyNTUsIDAsIDAsIDApOwor
ICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50
OjprRmlsbF9TdHlsZSk7CisKKyAgICBTa1BhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVUbyhyaWdo
dCAtIDEzLCBtaWRkbGUgLSAzKTsKKyAgICBwYXRoLnJMaW5lVG8oNiwgMCk7CisgICAgcGF0aC5y
TGluZVRvKC0zLCA2KTsKKyAgICBwYXRoLmNsb3NlKCk7CisgICAgY2FudmFzLT5kcmF3UGF0aChw
YXRoLCBwYWludCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAg
YWRqdXN0TWVudUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCisvLyBVc2VkIHRv
IHBhaW50IHN0eWxlZCBtZW51bGlzdHMgKGkuZS4gd2l0aCBhIG5vbi1kZWZhdWx0IGJvcmRlcikK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVudUxpc3QobywgaSwgcmVjdCk7Cit9CisK
K2ludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQ
YWRkaW5nKHN0eWxlLCBMZWZ0UGFkZGluZyk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoreworICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgUmlnaHRQYWRk
aW5nKTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBtZW51TGlz
dEludGVybmFsUGFkZGluZyhzdHlsZSwgVG9wUGFkZGluZyk7Cit9CisKK2ludCBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUs
IEJvdHRvbVBhZGRpbmcpOworfQorCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRq
dXN0QnV0dG9uSW5uZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8g
VGhpcyBpbm5lciBwYWRkaW5nIG1hdGNoZXMgRmlyZWZveC4KKyAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgoMSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0
aCgzLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgxLCBGaXhl
ZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoMywgRml4ZWQpKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0
IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICByZXR1cm4gaXNFbmFibGVkKG8pOworfQor
CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcig0MCwgNDAsIDQwKTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphY3RpdmVMaXN0Qm94U2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCk7
Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6aW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMjAwLCAy
MDAsIDIwMCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6aW5hY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29s
b3IoNTAsIDUwLCA1MCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6Om1lbnVM
aXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHBhZGRpbmdUeXBlKSBj
b25zdAoreworICAgIC8vIFRoaXMgaW50ZXJuYWwgcGFkZGluZyBpcyBpbiBhZGRpdGlvbiB0byB0
aGUgdXNlci1zdXBwbGllZCBwYWRkaW5nLgorICAgIC8vIE1hdGNoZXMgdGhlIEZGIGJlaGF2aW9y
LgorICAgIGludCBwYWRkaW5nID0gc3R5bGVkTWVudUxpc3RJbnRlcm5hbFBhZGRpbmdbcGFkZGlu
Z1R5cGVdOworCisgICAgLy8gUmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIHJpZ2h0IGFycm93IGhlcmUu
IFRoZSByZXN0IG9mIHRoZSBwYWRkaW5nIGlzCisgICAgLy8gc2V0IGJ5IGFkanVzdE1lbnVMaXN0
U3R5bGUsIHNpbmNlIFBvcE1lbnVXaW4uY3BwIHVzZXMgdGhlIHBhZGRpbmcgZnJvbQorICAgIC8v
IFJlbmRlck1lbnVMaXN0IHRvIGxheSBvdXQgdGhlIGluZGl2aWR1YWwgaXRlbXMgaW4gdGhlIHBv
cHVwLgorICAgIC8vIElmIHRoZSBNZW51TGlzdCBhY3R1YWxseSBoYXMgYXBwZWFyYW5jZSAiTm9B
cHBlYXJhbmNlIiwgdGhlbiB0aGF0IG1lYW5zCisgICAgLy8gd2UgZG9uJ3QgZHJhdyBhIGJ1dHRv
biwgc28gZG9uJ3QgcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuCisgICAgY29uc3QgaW50IGJhcl90eXBl
ID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IFJpZ2h0UGFkZGluZyA6IExlZnRQYWRkaW5n
OworICAgIGlmIChwYWRkaW5nVHlwZSA9PSBiYXJfdHlwZSAmJiBzdHlsZS0+YXBwZWFyYW5jZSgp
ICE9IE5vQ29udHJvbFBhcnQpCisgICAgICAgIHBhZGRpbmcgKz0gU2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOworCisgICAgcmV0dXJuIHBhZGRpbmc7
Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1MaW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjViMmM2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4X2gKKyNkZWZpbmUg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4X2gKKworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CisgICAgcHVibGljOgorICAgICAgICBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXgoKTsKKyAgICAgICAgflJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpIHsg
fQorCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CisKKyAgICAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUg
YWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhl
IGZvY3VzIHJpbmcuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgICAgIC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rp
b24gY29sb3IuCisgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5r
SW50ZXJ2YWwoKSBjb25zdDsKKworICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCisgICAgICAgIHZp
cnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIERvY3VtZW50KiwgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisK
KyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KworICAgICAgICAvLyBNZW51TGlzdCByZWZlcnMgdG8gYW4gdW5zdHlsZWQgbWVudWxpc3QgKG1l
YW5pbmcgYSBtZW51bGlzdCB3aXRob3V0CisgICAgICAgIC8vIGJhY2tncm91bmQtY29sb3Igb3Ig
Ym9yZGVyIHNldCkgYW5kIE1lbnVMaXN0QnV0dG9uIHJlZmVycyB0byBhIHN0eWxlZAorICAgICAg
ICAvLyBtZW51bGlzdCAoYSBtZW51bGlzdCB3aXRoIGJhY2tncm91bmQtY29sb3Igb3IgYm9yZGVy
IHNldCkuIFRoZXkgaGF2ZQorICAgICAgICAvLyB0aGlzIGRpc3RpbmN0aW9uIHRvIHN1cHBvcnQg
c2hvd2luZyBhcXVhIHN0eWxlIHRoZW1lcyB3aGVuZXZlciB0aGV5CisgICAgICAgIC8vIHBvc3Np
Ymx5IGNhbiwgd2hpY2ggaXMgc29tZXRoaW5nIHdlIGRvbid0IHdhbnQgdG8gcmVwbGljYXRlLgor
ICAgICAgICAvLworICAgICAgICAvLyBJbiBzaG9ydCwgd2UgZWl0aGVyIGdvIGRvd24gdGhlIE1l
bnVMaXN0IGNvZGUgcGF0aCBvciB0aGUgTWVudUxpc3RCdXR0b24KKyAgICAgICAgLy8gY29kZXBh
dGguIFdlIG5ldmVyIGdvIGRvd24gYm90aC4gQW5kIGluIGJvdGggY2FzZXMsIHRoZXkgcmVuZGVy
IHRoZQorICAgICAgICAvLyBlbnRpcmUgbWVudWxpc3QuCisgICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgLy8gVGhlc2UgbWV0aG9k
cyBkZWZpbmUgdGhlIHBhZGRpbmcgZm9yIHRoZSBNZW51TGlzdCdzIGlubmVyIGJsb2NrLgorICAg
ICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVy
bmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RCdXR0b25Jbm5lclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisK
KyAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRp
bnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCisgICAgICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAg
ICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlz
IHN1cHBvcnRlZCBhdCBhbGwuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICAvLyBMaXN0IEJveCBzZWxl
Y3Rpb24gY29sb3IKKyAgICAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIENv
bG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1lbnVMaXN0SW50ZXJuYWxQ
YWRkaW5nKFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBlKSBjb25zdDsKKyAgICB9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="13714"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28188</attachid>
            <date>2009-03-02 11:17:16 -0800</date>
            <delta_ts>2009-03-02 13:18:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39483</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWRmNjI1MS4uZjVhYzAyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAwOS0wMy0wMiAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gTGludXg6IFN3aXRjaCB0byB1c2luZyBTa2lhIHRvIHJlbmRl
ciB3aWRnZXRzLgorCisgICAgICAgIEluIG9yZGVyIHRvIHNhbmRib3ggdGhlIENocm9taXVtIHJl
bmRlcmVyIG9uIExpbnV4IHdlIG5lZWQgdG8gcmVtb3ZlIHRoZQorICAgICAgICBYIGNvbm5lY3Rp
b24uIEdUSyBjYW5ub3QgcmVuZGVyIHdpdGhvdXQgYW4gWCBjb25uZWN0aW9uIHNvLCBmb3Igbm93
LCB3ZQorICAgICAgICByZW5kZXIgd2lkZ2V0cyBvdXJzZWx2ZXMuCisKKyAgICAgICAgUHJldmlv
dXNseSB1c2UgZGlkbid0IGFudGktYWxpYXMgZm9udHMgaW4gb3JkZXIgdG8gbWF0Y2ggV2luZG93
cyBmb250CisgICAgICAgIHJlbmRlcmluZyBleGFjdGx5LiBUaGlzIHdhcyBoZWxwZnVsIHdoZW4g
Ym9vdHN0cmFwcGluZyBvdXIgbGF5b3V0CisgICAgICAgIHRlc3RzLiBOb3csIGhvd2V2ZXIsIHdl
IGFyZSByZWFkeSB0byBlbmFibGUgaXQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0MjQ0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW06OmJ1dHRvblNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja1BpZWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGh1bWIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXR1cFBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoUGxh
dGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChQbGF0Zm9y
bUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1HdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaDogQWRkZWQuCisKIDIwMDktMDMtMDIgIEFkYW0g
VHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXgg
Zm9yIFF0IHBvcnQuICBSZW1vdmUgdW5uZWNlc3NhcnkgYXNzZXJ0LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKaW5kZXggNGE1
NTgwNi4uMzA5Njc4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCkBAIC0xODUsNyArMTg1LDkgQEAgSW50U2l6ZSBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtOjpidXR0b25TaXplKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogCiAg
ICAgaW50IGdpcnRoID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBrTGF5b3V0
VGVzdE1vZGVHaXJ0aCA6IHRoaWNrbmVzczsKICNlbHNlCi0gICAgaW50IGdpcnRoID0gdGhpY2tu
ZXNzOworICAgIGNvbnN0IGludCBnaXJ0aCA9IDA7CisgICAgLy8gT24gTGludXgsIHdlIGRvbid0
IHVzZSBidXR0b25zCisgICAgcmV0dXJuIEludFNpemUoMCwgMCk7CiAjZW5kaWYKIAogICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtTGludXguY3BwCmluZGV4IDk1ZDBmNzguLjY2OTQ5NDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAK
QEAgLTM3LDIxICszNywxMSBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKLSNpbmNsdWRlICJndGtkcmF3aW5nLmgiCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgInNraWEvZXh0L0dka1NraWEuaCIKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewotICAgIHN0YXRpYyBpbnQg
c2l6ZSA9IDA7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIE1vekd0a1Njcm9sbGJhck1ldHJp
Y3MgbWV0cmljczsKLSAgICAgICAgbW96X2d0a19nZXRfc2Nyb2xsYmFyX21ldHJpY3MoJm1ldHJp
Y3MpOwotICAgICAgICBzaXplID0gbWV0cmljcy5zbGlkZXJfd2lkdGg7Ci0gICAgfQotICAgIHJl
dHVybiBzaXplOworICAgIHJldHVybiAxNTsKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpCkBAIC02MCw4OSArNTAsODAgQEAgYm9v
bCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBHaXZlbiBhbiB1bmluaXRpYWxpc2VkIHdpZGdldCBz
dGF0ZSBvYmplY3QsIHNldCB0aGUgbWVtYmVycyBzdWNoIHRoYXQgaXQncwotLy8gc2FuZSBmb3Ig
ZHJhd2luZyBzY3JvbGxiYXJzCi1zdGF0aWMgdm9pZCBpbml0TW96U3RhdGUoR3RrV2lkZ2V0U3Rh
dGUqIG1velN0YXRlKQotewotICAgIG1velN0YXRlLT5hY3RpdmUgPSB0cnVlOwotICAgIG1velN0
YXRlLT5mb2N1c2VkID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmluSG92ZXIgPSBmYWxzZTsKLSAg
ICBtb3pTdGF0ZS0+ZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBtb3pTdGF0ZS0+aXNEZWZhdWx0ID0g
ZmFsc2U7Ci0gICAgbW96U3RhdGUtPmNhbkRlZmF1bHQgPSBmYWxzZTsKLSAgICBtb3pTdGF0ZS0+
ZGVwcmVzc2VkID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmN1cnBvcyA9IDA7Ci0gICAgbW96U3Rh
dGUtPm1heHBvcyA9IDA7Ci19Ci0KLS8vIFBhaW50IGEgR1RLIHdpZGdldAotLy8gICBnYzogY29u
dGV4dCB0byBkcmF3IG9udG8KLS8vICAgcmVjdDogdGhlIGFyZWEgb2YgdGhlIHdpZGdldAotLy8g
ICB3aWRnZXRfdHlwZTogdGhlIHR5cGUgb2Ygd2lkZ2V0IHRvIGRyYXcKLS8vICAgZmxhZ3M6IHdp
ZGdldCBkZXBlbmRlbnQgZmxhZ3MgKGUuZy4gZGlyZWN0aW9uIG9mIHNjcm9sbGJhciBhcnJvd3Mg
ZXRjKQotLy8KLS8vIFNlZSBwYWludE1veldpZ2V0IGluIFJlbmRlclRoZW1lR3RrLmNwcCBmb3Ig
YW4gZXhwbGFuYXRpb24gb2YgdGhlIGNsaXBwaW5nLgotc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxi
YXJXaWRnZXQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgcmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXRfdHlw
ZSwgZ2ludCBmbGFncykKLXsKLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MgPSBnYy0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2RrUmVjdCA9IHsgcmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKLQotICAgIGNvbnN0IFNr
SVJlY3QgY2xpcF9yZWdpb24gPSBwY3MtPmNhbnZhcygpLT5nZXRUb3RhbENsaXAoKS5nZXRCb3Vu
ZHMoKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBnYy0+Z2V0Q1RNKCkuaW52ZXJz
ZSgpOwotICAgIEludFBvaW50IHBvcyA9IGN0bS5tYXBQb2ludCgKLSAgICAgICAgSW50UG9pbnQo
U2tTY2FsYXJSb3VuZChjbGlwX3JlZ2lvbi5mTGVmdCksIFNrU2NhbGFyUm91bmQoY2xpcF9yZWdp
b24uZlRvcCkpKTsKLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ2xpcFJlY3Q7Ci0gICAgZ2RrQ2xpcFJl
Y3QueCA9IHBvcy54KCk7Ci0gICAgZ2RrQ2xpcFJlY3QueSA9IHBvcy55KCk7Ci0gICAgZ2RrQ2xp
cFJlY3Qud2lkdGggPSBjbGlwX3JlZ2lvbi53aWR0aCgpOwotICAgIGdka0NsaXBSZWN0LmhlaWdo
dCA9IGNsaXBfcmVnaW9uLmhlaWdodCgpOwotCi0gICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3Qo
Jmdka1JlY3QsICZnZGtDbGlwUmVjdCwgJmdka0NsaXBSZWN0KTsKLQotICAgIEd0a1dpZGdldFN0
YXRlIG1velN0YXRlOwotICAgIGluaXRNb3pTdGF0ZSgmbW96U3RhdGUpOwotCi0gICAgbW96X2d0
a193aWRnZXRfcGFpbnQod2lkZ2V0X3R5cGUsIHBjcy0+Z2RrX3NraWEoKSwgJmdka1JlY3QsICZn
ZGtDbGlwUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmbW96U3RhdGUsIGZsYWdzLCBH
VEtfVEVYVF9ESVJfTFRSKTsKLX0KLQogdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWlu
dFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0
JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlKQogewotICAgIGNvbnN0IGJvb2wgaG9yeiA9
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIGNv
bnN0IEd0a1RoZW1lV2lkZ2V0VHlwZSB0cmFja190eXBlID0KLSAgICAgICAgaG9yeiA/IE1PWl9H
VEtfU0NST0xMQkFSX1RSQUNLX0hPUklaT05UQUwgOiBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19W
RVJUSUNBTDsKLSAgICBwYWludFNjcm9sbGJhcldpZGdldChnYywgcmVjdCwgdHJhY2tfdHlwZSwg
MCk7Ci19CisgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7Cisg
ICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKKyAgICBTa0Nh
bnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKIAot
dm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQq
IGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKLXsKLSAgICAv
LyBGSVhNRTogSXQgYXBwZWFycyB0aGUgZWl0aGVyIHdlJ3JlIHVwc2V0dGluZyBHVEsgYnkgZm9y
Y2luZyBXZWJLaXQgc2l6ZXMKLSAgICAvLyBvbiBpdCwgb3IgdGhlIGJ1dHRvbnMgZXhwZWN0IHRo
ZSB0cmFjayB0byBiZSBkcmF3biB1bmRlciB0aGVtLiAgRWl0aGVyCi0gICAgLy8gd2F5LCB3ZSBl
bmQgdXAgd2l0aCB1bnBhaW50ZWQgcGl4ZWxzIHdoaWNoIGFyZSB1cHNldHRpbmcgdGhlIHBpeGVs
Ci0gICAgLy8gdGVzdHMuIFRodXMgd2UgcGFpbnQgZ3JlZW4gdW5kZXIgdGhlIGJ1dHRvbnMgdG8s
IGF0IGxlYXN0LCBtYWtlIHRoZQotICAgIC8vIHBpeGVsIG91dHB1dCB0aGUgc2FtZSBiZXR3ZWVu
IGRlYnVnIGFuZCBvcHQgYnVpbGRzLgogICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0
QVJHQigyNTUsIDAsIDI1NSwgMTI4KTsKKyAgICBwYWludC5zZXRBUkdCKDI1NSwgMHhlMywgMHhk
ZCwgMHhkOCk7CiAgICAgU2tSZWN0IHNrcmVjdDsKLSAgICBza3JlY3Quc2V0KHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkgLSAxKTsKLSAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVj
dChza3JlY3QsIHBhaW50KTsKKyAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmln
aHQsIGJvdHRvbSk7CisgICAgY2FudmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKKworICAg
IHBhaW50LnNldEFSR0IoMjU1LCAweGM1LCAweGJhLCAweGIwKTsKKyAgICBjYW52YXMtPmRyYXdM
aW5lKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54KCksIGJvdHRvbSwgcGFpbnQpOworICAgIGNh
bnZhcy0+ZHJhd0xpbmUocmlnaHQsIHJlY3QueSgpLCByaWdodCwgYm90dG9tLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwgcmVjdC55KCksIHJpZ2h0LCByZWN0LnkoKSwg
cGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCksIGJvdHRvbSwgcmlnaHQsIGJv
dHRvbSwgcGFpbnQpOworfQogCi0gICAgY29uc3QgYm9vbCBob3J6ID0gc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgZ2ludCBmbGFncyA9IGhvcnog
PyAwIDogTU9aX0dUS19TVEVQUEVSX1ZFUlRJQ0FMOwotICAgIGZsYWdzIHw9IEZvcndhcmRCdXR0
b25FbmRQYXJ0ID09IHBhcnQgPyBNT1pfR1RLX1NURVBQRVJfRE9XTiA6IDA7Ci0gICAgcGFpbnRT
Y3JvbGxiYXJXaWRnZXQoZ2MsIHJlY3QsIE1PWl9HVEtfU0NST0xMQkFSX0JVVFRPTiwgZmxhZ3Mp
Owordm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRl
eHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQor
eworICAgIC8vIFdlIGRvbid0IHVzZSBidXR0b25zCiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bTo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBjb25zdCBib29sIGhvcnogPSBzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBjb25zdCBH
dGtUaGVtZVdpZGdldFR5cGUgdGh1bWJfdHlwZSA9Ci0gICAgICAgIGhvcnogPyBNT1pfR1RLX1ND
Uk9MTEJBUl9USFVNQl9IT1JJWk9OVEFMIDogTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfVkVSVElD
QUw7Ci0gICAgcGFpbnRTY3JvbGxiYXJXaWRnZXQoZ2MsIHJlY3QsIHRodW1iX3R5cGUsIDApOwor
ICAgIGNvbnN0IGJvb2wgaG92ZXJlZCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVt
YlBhcnQ7CisgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7Cisg
ICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKKyAgICBjb25z
dCBpbnQgbWlkeCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMjsKKyAgICBjb25zdCBpbnQg
bWlkeSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDI7CisgICAgY29uc3QgYm9vbCB2ZXJ0
aWNhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAg
ICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KTsKKworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgaWYgKGhvdmVyZWQpCisgICAgICAgIHBhaW50
LnNldEFSR0IoMjU1LCAweGZmLCAweGZmLCAweGZmKTsKKyAgICBlbHNlCisgICAgICAgIHBhaW50
LnNldEFSR0IoMjU1LCAweGY0LCAweGYyLCAweGVmKTsKKworICAgIFNrUmVjdCBza3JlY3Q7Cisg
ICAgaWYgKHZlcnRpY2FsKSB7CisgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwg
bWlkeCArIDEsIGJvdHRvbSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHNrcmVjdC5zZXQocmVjdC54
KCksIHJlY3QueSgpLCByaWdodCwgbWlkeSArIDEpOworICAgIH0KKyAgICBjYW52YXMtPmRyYXdS
ZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgaWYgKGhvdmVyZWQpIHsKKyAgICAgIHBhaW50LnNl
dEFSR0IoMjU1LCAweGY0LCAweGYyLCAweGVmKTsKKyAgICB9IGVsc2UgeworICAgICAgcGFpbnQu
c2V0QVJHQigyNTUsIDB4ZWEsIDB4ZTUsIDB4ZTApOworICAgIH0KKyAgICBpZiAodmVydGljYWwp
IHsKKyAgICAgIHNrcmVjdC5zZXQobWlkeCArIDEsIHJlY3QueSgpLCByaWdodCwgYm90dG9tKTsK
KyAgICB9IGVsc2UgeworICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgbWlkeSArIDEsIHJpZ2h0
LCBib3R0b20pOworICAgIH0KKyAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOwor
CisgICAgcGFpbnQuc2V0QVJHQigyNTUsIDB4OWQsIDB4OTYsIDB4OGUpOworICAgIGNhbnZhcy0+
ZHJhd0xpbmUocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSwgYm90dG9tLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3TGluZShyaWdodCwgcmVjdC55KCksIHJpZ2h0LCBib3R0b20sIHBhaW50
KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0LnkoKSwgcmlnaHQsIHJlY3Qu
eSgpLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwgYm90dG9tLCByaWdo
dCwgYm90dG9tLCBwYWludCk7CisKKyAgICBpZiAocmVjdC5oZWlnaHQoKSA+IDEwICYmIHJlY3Qu
d2lkdGgoKSA+IDEwKSB7CisgICAgICBwYWludC5zZXRBUkdCKDI1NSwgMHg5ZCwgMHg5NiwgMHg4
ZSk7CisgICAgICBjYW52YXMtPmRyYXdMaW5lKG1pZHggLSAxLCBtaWR5LCBtaWR4ICsgMywgbWlk
eSwgcGFpbnQpOworICAgICAgY2FudmFzLT5kcmF3TGluZShtaWR4IC0gMSwgbWlkeSAtIDMsIG1p
ZHggKyAzLCBtaWR5IC0gMywgcGFpbnQpOworICAgICAgY2FudmFzLT5kcmF3TGluZShtaWR4IC0g
MSwgbWlkeSArIDMsIG1pZHggKyAzLCBtaWR5ICsgMywgcGFpbnQpOworICAgIH0KIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCmluZGV4IDg2Zjk2ZWUu
LjdiN2QxOTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9p
ZCBGb250UGxhdGZvcm1EYXRhOjpzZXR1cFBhaW50KFNrUGFpbnQqIHBhaW50KSBjb25zdAogewog
ICAgIGNvbnN0IGZsb2F0IHRzID0gbV90ZXh0U2l6ZSA+IDAgPyBtX3RleHRTaXplIDogMTI7CiAK
LSAgICBwYWludC0+c2V0QW50aUFsaWFzKGZhbHNlKTsKKyAgICBwYWludC0+c2V0QW50aUFsaWFz
KHRydWUpOwogICAgIHBhaW50LT5zZXRTdWJwaXhlbFRleHQoZmFsc2UpOwogICAgIHBhaW50LT5z
ZXRUZXh0U2l6ZShTa0Zsb2F0VG9TY2FsYXIodHMpKTsKICAgICBwYWludC0+c2V0VHlwZWZhY2Uo
bV90eXBlZmFjZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggYzUxN2E5MS4uZTExZGZiMSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcApAQCAtNDYsMTAgKzQ2LDYgQEAKIAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
LSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSNpbmNsdWRlICJHZGtTa2lhLmgiCi0jZW5kaWYKLQog
Ly8gU3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRW5jYXBzdWxhdGVzIHRoZSBhZGRpdGlvbmFs
IHBhaW50aW5nIHN0YXRlIGluZm9ybWF0aW9uIHdlIHN0b3JlIGZvciBlYWNoCkBAIC0xODEsMTkg
KzE3NywxMCBAQCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKHNraWE6
OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0
ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0jaWYgZGVmaW5lZChP
U19MSU5VWCkKLSAgICBtX2dka3NraWEgPSBtX2NhbnZhcyA/IGdka19za2lhX25ldyhtX2NhbnZh
cykgOiAwOwotI2VuZGlmCiB9CiAKIFBsYXRmb3JtQ29udGV4dFNraWE6On5QbGF0Zm9ybUNvbnRl
eHRTa2lhKCkKIHsKLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAgIGlmIChtX2dka3NraWEpIHsK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9nZGtza2lhKTsKLSAgICAgICAgbV9nZGtza2lhID0g
MDsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52
YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDllMzlkYTUuLjg4
NTBhNmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaApAQCAtNDMsOCArNDMsNiBAQAogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCi10eXBlZGVmIHN0cnVjdCBfR2RrRHJhd2FibGUgR2RrU2tpYTsKLQogLy8gVGhpcyBj
bGFzcyBob2xkcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3RhdGUgZm9yIEdyYXBoaWNzQ29udGV4
dC4gV2UgcHV0CiAvLyBtb3N0IG9mIG91ciBTa2lhIHdyYXBwZXJzIG9uIHRoaXMgY2xhc3MuIElu
IHRoZW9yeSwgYSBsb3Qgb2YgdGhpcyBzdHVmZiBjb3VsZAogLy8gYmUgbW92ZWQgdG8gR3JhcGhp
Y3NDb250ZXh0IGRpcmVjdGx5LCBleGNlcHQgdGhhdCBzb21lIGNvZGUgZXh0ZXJuYWwgdG8gdGhp
cwpAQCAtMTY3LDExICsxNjUsNiBAQCBwdWJsaWM6CiAgICAgLy8gcG9zc2libGUgcXVhbGl0eS4K
ICAgICBib29sIGlzUHJpbnRpbmcoKTsKIAotI2lmIGRlZmluZWQoX19saW51eF9fKQotICAgIC8v
IEZJWE1FOiBzaG91bGQgYmUgY2FtZWxDYXNlLgotICAgIEdka1NraWEqIGdka19za2lhKCkgY29u
c3QgeyByZXR1cm4gbV9nZGtza2lhOyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICNpZiBkZWZpbmVk
KF9fbGludXhfXykgfHwgUExBVEZPUk0oV0lOX09TKQogICAgIC8vIFVzZWQgd2hlbiByZXN0b3Jp
bmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4gaW1hZ2UgY2xpcC4gT25seSBzaG93cyB0aGUgcGl4ZWxz
IGluCkBAIC0xOTUsMTEgKzE4OCw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ3VycmVudCBwYXRoIGlu
IGdsb2JhbCBjb29yZGluYXRlcy4KICAgICBTa1BhdGggbV9wYXRoOwogCi0jaWYgZGVmaW5lZChf
X2xpbnV4X18pCi0gICAgLy8gQSBwb2ludGVyIHRvIGEgR0RLIERyYXdhYmxlIHdyYXBwaW5nIG9m
IHRoaXMgU2tpYSBjYW52YXMKLSAgICBHZGtTa2lhKiBtX2dka3NraWE7Ci0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKFdJTl9PUykKICAgICBib29sIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1HdGsu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApzaW1p
bGFyaXR5IGluZGV4IDI5JQpyZW5hbWUgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtR3RrLmNwcApyZW5hbWUgdG8gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmNwcAppbmRleCAyMjBjZTA3Li4wODY1NTJkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCkBAIC0yMiwyMSArMjIsMjEgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1
bUd0ay5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oIgogCiAjaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1
ZGUgImd0a2RyYXdpbmcuaCIKLSNpbmNsdWRlICJHZGtTa2lhLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogCi0j
aW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgIlNrU2hhZGVyLmgiCisjaW5jbHVkZSAiU2tH
cmFkaWVudFNoYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDE2ICs0Nywy
MCBAQCBlbnVtIFBhZGRpbmdUeXBlIHsKICAgICBMZWZ0UGFkZGluZwogfTsKIAotc3RhdGljIGNv
bnN0IGludCBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGluZ1s0XSA9IHsgMSwgNCwgMSwgNCB9
Oworc3RhdGljIGNvbnN0IGludCBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGluZ1s0XSA9IHsg
MSwgMTYsIDEsIDQgfTsKIAotLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXpl
LiAgV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAotLy8gc2l6ZSBmb3IgdGhlICJzeXN0
ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgot
Ly8gZm9ybSBjb250cm9sIGZvbnRzLgotc3RhdGljIGZsb2F0IERlZmF1bHRGb250U2l6ZSA9IDE2
LjA7CitzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCit7
CisgICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdzIGZvciB1
cy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLXN0YXRpYyBDb2xvciBtYWtlQ29sb3IoY29uc3Qg
R2RrQ29sb3ImIGMpCitzdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gQ29sb3IobWFrZVJHQihjLnJl
ZCA+PiA4LCBjLmdyZWVuID4+IDgsIGMuYmx1ZSA+PiA4KSk7CisgICAgaWYgKHN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
c2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7
CiB9CiAKIC8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgpAQCAtNzMsMjE0ICs3Nyw1OCBAQCBz
dGF0aWMgY29uc3QgY2hhciogZGVmYXVsdEdVSUZvbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IHJldHVybiAiQXJpYWwiOwogfQogCi0vLyBDb252ZXJ0cyBwb2ludHMgdG8gcGl4ZWxzLiAgT25l
IHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaC4KLXN0YXRpYyBmbG9hdCBwb2ludHNUb1BpeGVscyhm
bG9hdCBwb2ludHMpCi17Ci0gICAgc3RhdGljIGZsb2F0IHBpeGVsc1BlckluY2ggPSAwLjBmOwot
ICAgIGlmICghcGl4ZWxzUGVySW5jaCkgewotICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICAgICAgLy8gRklYTUU6ICBJJ20gZ2V0dGluZyBm
bG9hdGluZyBwb2ludCB2YWx1ZXMgb2Ygfjc1IGFuZCB+MTAwLAotICAgICAgICAvLyBhbmQgaXQn
cyBtYWtpbmcgbXkgZm9udHMgbG9vayBhbGwgd3JvbmcuICBGaWd1cmUgdGhpcyBvdXQuCi0jaWYg
MAotICAgICAgICBpZiAoc2NyZWVuKQotICAgICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IGdka19z
Y3JlZW5fZ2V0X3Jlc29sdXRpb24oc2NyZWVuKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAg
ICAgICAgICBwaXhlbHNQZXJJbmNoID0gOTYuMGY7IC8vIE1hdGNoIHRoZSBkZWZhdWx0IHdlIHNl
dCBvbiBXaW5kb3dzLgotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJ
bmNoID0gNzIuMGY7Ci0gICAgcmV0dXJuIHBvaW50cyAvIHBvaW50c1BlckluY2ggKiBwaXhlbHNQ
ZXJJbmNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7Ci0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotc3Rh
dGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3
aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBC
dXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFy
dDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAg
ICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
c3RhdGljIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgUlRMOgotICAg
ICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JUTDsKLSAgICBjYXNlIExUUjoKLSAgICAgICAgcmV0
dXJuIEdUS19URVhUX0RJUl9MVFI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdUS19U
RVhUX0RJUl9OT05FOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0TW96U3RhdGUoUmVuZGVy
VGhlbWUqIHRoZW1lLCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIFJlbmRlck9iamVjdCogbykKLXsK
LSAgICBzdGF0ZS0+YWN0aXZlID0gdGhlbWUtPmlzUHJlc3NlZChvKTsKLSAgICBzdGF0ZS0+Zm9j
dXNlZCA9IHRoZW1lLT5pc0ZvY3VzZWQobyk7Ci0gICAgc3RhdGUtPmluSG92ZXIgPSB0aGVtZS0+
aXNIb3ZlcmVkKG8pOwotICAgIC8vIEZJWE1FOiBEaXNhYmxlZCBkb2VzIG5vdCBhbHdheXMgZ2l2
ZSB0aGUgY29ycmVjdCBhcHBlYXJhbmNlIGZvciBSZWFkT25seQotICAgIHN0YXRlLT5kaXNhYmxl
ZCA9ICF0aGVtZS0+aXNFbmFibGVkKG8pIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvKTsK
LSAgICBzdGF0ZS0+aXNEZWZhdWx0ID0gZmFsc2U7Ci0gICAgc3RhdGUtPmNhbkRlZmF1bHQgPSBm
YWxzZTsKLSAgICBzdGF0ZS0+ZGVwcmVzc2VkID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIHBh
aW50TW96V2lkZ2V0KFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUs
IFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVzdCBj
bGFpbSB0byBoYXZlIHN1Y2NlZWRlZAotICAgIGlmIChpLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3RrV2lkZ2V0U3RhdGUgbW96U3Rh
dGU7Ci0gICAgc2V0TW96U3RhdGUodGhlbWUsICZtb3pTdGF0ZSwgbyk7Ci0KLSAgICBpbnQgZmxh
Z3M7Ci0KLSAgICAvLyBXZSBtaWdodCB3YW50IHRvIG1ha2Ugc2V0dGluZyBmbGFncyB0aGUgY2Fs
bGVyJ3Mgam9iIGF0IHNvbWUgcG9pbnQgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaGVyZS4KLSAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE1PWl9HVEtfQlVUVE9OOgotICAgICAgICBmbGFncyA9
IEdUS19SRUxJRUZfTk9STUFMOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfQ0hF
Q0tCVVRUT046Ci0gICAgY2FzZSBNT1pfR1RLX1JBRElPQlVUVE9OOgotICAgICAgICBmbGFncyA9
IHRoZW1lLT5pc0NoZWNrZWQobyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGZsYWdzID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1Db250
ZXh0U2tpYSogcGNzID0gaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBTa0NhbnZh
cyogY2FudmFzID0gcGNzLT5jYW52YXMoKTsKLSAgICBpZiAoIWNhbnZhcykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgR2RrUmVjdGFuZ2xlIGdka1JlY3Q7Ci0gICAgZ2RrUmVjdC54ID0g
cmVjdC54KCk7Ci0gICAgZ2RrUmVjdC55ID0gcmVjdC55KCk7Ci0gICAgZ2RrUmVjdC53aWR0aCA9
IHJlY3Qud2lkdGgoKTsKLSAgICBnZGtSZWN0LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0KLSAg
ICAvLyBnZXRUb3RhbENsaXAgcmV0dXJucyB0aGUgY3VycmVudGx5IHNldCBjbGlwIHJlZ2lvbiBp
biBkZXZpY2UgY29vcmRpbmF0ZXMsCi0gICAgLy8gc28gd2UgaGF2ZSB0byBhcHBseSB0aGUgY3Vy
cmVudCB0cmFuc2Zvcm0gKGFjdHVhbGx5IHdlIG9ubHkgc3VwcG9ydCB0cmFuc2xhdGlvbnMpCi0g
ICAgLy8gdG8gZ2V0IHRoZSBwYWdlIGNvb3JkaW5hdGVzIHRoYXQgb3VyIGd0ayB3aWRnZXQgcmVu
ZGVyaW5nIGV4cGVjdHMuCi0gICAgLy8gV2UgaW52ZXJ0IGl0IGJlY2F1c2Ugd2Ugd2FudCB0byBt
YXAgZnJvbSBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gcGFnZSBjb29yZGluYXRlcy4KLSAgICBjb25z
dCBTa0lSZWN0IGNsaXBSZWdpb24gPSBjYW52YXMtPmdldFRvdGFsQ2xpcCgpLmdldEJvdW5kcygp
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IGkuY29udGV4dC0+Z2V0Q1RNKCkuaW52
ZXJzZSgpOwotICAgIEludFBvaW50IHBvcyA9IGN0bS5tYXBQb2ludChJbnRQb2ludChTa1NjYWxh
clJvdW5kKGNsaXBSZWdpb24uZkxlZnQpLCBTa1NjYWxhclJvdW5kKGNsaXBSZWdpb24uZlRvcCkp
KTsKLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ2xpcFJlY3Q7Ci0gICAgZ2RrQ2xpcFJlY3QueCA9IHBv
cy54KCk7Ci0gICAgZ2RrQ2xpcFJlY3QueSA9IHBvcy55KCk7Ci0gICAgZ2RrQ2xpcFJlY3Qud2lk
dGggPSBjbGlwUmVnaW9uLndpZHRoKCk7Ci0gICAgZ2RrQ2xpcFJlY3QuaGVpZ2h0ID0gY2xpcFJl
Z2lvbi5oZWlnaHQoKTsKLQotICAgIC8vIG1vel9ndGtfd2lkZ2V0X3BhaW50IHdpbGwgcGFpbnQg
b3V0c2lkZSB0aGUgYm91bmRzIG9mIGdka1JlY3QgdW5sZXNzIHdlIGZ1cnRoZXIgcmVzdHJpY3Qg
fGdka0NsaXBSZWN0fC4KLSAgICBnZGtfcmVjdGFuZ2xlX2ludGVyc2VjdCgmZ2RrUmVjdCwgJmdk
a0NsaXBSZWN0LCAmZ2RrQ2xpcFJlY3QpOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBndGtUZXh0RGlyZWN0aW9uKG8tPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKLQotICAgIHJl
dHVybiBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBlLCBwY3MtPmdka19za2lhKCksICZnZGtSZWN0
LCAmZ2RrQ2xpcFJlY3QsICZtb3pTdGF0ZSwgZmxhZ3MsIGRpcmVjdGlvbikgIT0gTU9aX0dUS19T
VUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKLXsK
LSAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVk
IG1hbnkgdGltZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KLSAgICBy
ZW5kZXJUaGVtZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotc3RhdGljIGRvdWJs
ZSBxdWVyeVN5c3RlbUJsaW5rSW50ZXJ2YWwoZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkKLXsKLSAg
ICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLQot
ICAgIGdib29sZWFuIHNob3VsZEJsaW5rOwotICAgIGdpbnQgdGltZTsKLQotICAgIGdfb2JqZWN0
X2dldChzZXR0aW5ncywgImd0ay1jdXJzb3ItYmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vy
c29yLWJsaW5rLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0KLSAgICBpZiAoIXNob3VsZEJsaW5rKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB0aW1lIC8gMTAwMC4wOwotfQotCi0vLyBJ
bXBsZW1lbnQgV2ViQ29yZTo6dGhlbWUoKSBmb3IgZ2V0dGluZyB0aGUgZ2xvYmFsIFJlbmRlclRo
ZW1lLgogUmVuZGVyVGhlbWUqIHRoZW1lKCkKIHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0ayBndGtUaGVtZTsKLSAgICByZXR1cm4gJmd0a1RoZW1lOworICAgIHN0YXRpYyBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXggdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKIH0KIAotUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6UmVuZGVyVGhlbWVDaHJvbWl1bUd0aygpCi0gICAgOiBtX2d0
a1dpbmRvdygwKQotICAgICwgbV9ndGtDb250YWluZXIoMCkKLSAgICAsIG1fZ3RrRW50cnkoMCkK
LSAgICAsIG1fZ3RrVHJlZVZpZXcoMCkKK1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6UmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4KCkKIHsKIH0KIAogLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNo
ZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNzLgotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1H
dGs6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyh0aGVt
ZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmV4dHJhUXVpcmtzU3R5
bGVTaGVldCgpCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJrc1N0
eWxlU2hlZXQoKQogewogICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAg
ICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKIH0KIAotQ29sb3Ig
UmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiB3
aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+
YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdKTsKKyAgICByZXR1cm4gQ29sb3IoMHgxZSwgMHg5MCwg
MHhmZik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKIHsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIG1h
a2VDb2xvcih3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFURV9BQ1RJVkVdKTsKKyAgICByZXR1
cm4gQ29sb3IoMHhjOCwgMHhjOCwgMHhjOCk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21p
dW1HdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0Nv
bG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnko
KTsKLSAgICByZXR1cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPnRleHRbR1RLX1NUQVRFX1NF
TEVDVEVEXSk7CisgICAgcmV0dXJuIENvbG9yKDAsIDAsIDApOwogfQogCi1Db2xvciBSZW5kZXJU
aGVtZUNocm9taXVtR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiB3aWRn
ZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+dGV4
dFtHVEtfU1RBVEVfQUNUSVZFXSk7CisgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIp
OwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwbGF0Zm9ybVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBs
YXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29s
b3IoMjU1LCAyNTUsIDE1MCk7CisgICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOwog
fQogCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkg
Y29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmNhcmV0QmxpbmtJbnRlcnZh
bCgpIGNvbnN0CiB7CiAgICAgLy8gRGlzYWJsZSB0aGUgYmxpbmtpbmcgY2FyZXQgaW4gbGF5b3V0
IHRlc3QgbW9kZSwgYXMgaXQgaW50cm9kdWNlcwogICAgIC8vIGEgcmFjZSBjb25kaXRpb24gZm9y
IHRoZSBwaXhlbCB0ZXN0cy4gaHR0cDovL2IvMTE5ODQ0MApAQCAtMjg4LDE1MyArMTM2LDIwNiBA
QCBkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29u
c3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBXZSBjYWNoZSB0aGUgaW50ZXJ2YWwgc28g
d2UgZG9uJ3QgaGF2ZSB0byByZXBlYXRlZGx5IHJlcXVlc3QgaXQgZnJvbSBndGsuCi0gICAgc3Rh
dGljIGRvdWJsZSBibGlua0ludGVydmFsID0gcXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKFJlbmRl
clRoZW1lOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSk7Ci0gICAgcmV0dXJuIGJsaW5rSW50ZXJ2YWw7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6c3lzdGVtRm9udChpbnQgcHJvcElk
LCBEb2N1bWVudCogZG9jdW1lbnQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAotewotICAgIGNvbnN0IGNoYXIqIGZhY2VOYW1lID0gMDsKLSAgICBmbG9hdCBmb250U2l6
ZSA9IDA7Ci0gICAgLy8gRklYTUU6IHNlZSBhbHNvIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3Bw
Ci0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlTWVudToKLSAgICBjYXNl
IENTU1ZhbHVlU3RhdHVzQmFyOgotICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHRpb246Ci0gICAg
ICAgIC8vIHRyaWdnZXJlZCBieSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jc3MyLXN5c3RlbS1mb250
cy5odG1sCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21h
bGxDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgotICAgICAgICBmYWNl
TmFtZSA9IGRlZmF1bHRHVUlGb250KGRvY3VtZW50KTsKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRz
IHNtYWxsZXI/ICBCZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuCi0gICAgICAgIGZvbnRT
aXplID0gRGVmYXVsdEZvbnRTaXplIC0gcG9pbnRzVG9QaXhlbHMoMik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoZG9jdW1l
bnQpOwotICAgICAgICBmb250U2l6ZSA9IERlZmF1bHRGb250U2l6ZTsKLSAgICB9CisgICAgcmV0
dXJuIDAuNTsKK30KIAotICAgIC8vIE9ubHkgdXBkYXRlIGlmIHRoZSBzaXplIG1ha2VzIHNlbnNl
LgotICAgIGlmIChmb250U2l6ZSA+IDApIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuc2V0RmFtaWx5KGZhY2VOYW1lKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoZm9udFNpemUpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
SXRhbGljKGZhbHNlKTsKLSAgICB9Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3lz
dGVtRm9udChpbnQgcHJvcElkLCBEb2N1bWVudCogZG9jdW1lbnQsIEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9udChOVUxMKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldFNwZWNpZmllZFNpemUoMTIpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZSh0cnVlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVz
Y3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRX
ZWlnaHROb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVt
TWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gMDsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRDaGVja2JveChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0NI
RUNLQlVUVE9OLCBvLCBpLCByZWN0KTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IGNoZWNrZWRJ
bWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2JveE9uIikucmVs
ZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5jaGVja2VkSW1hZ2UgPSBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4Q2hlY2tib3hPZmYiKS5yZWxlYXNlUmVmKCk7
CisKKyAgICBJbWFnZSogaW1hZ2UgPSB0aGlzLT5pc0NoZWNrZWQobykgPyBjaGVja2VkSW1hZ2Ug
OiB1bmNoZWNrZWRJbWFnZTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgcmVjdCk7
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
IHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRo
ZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQuICBU
aGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkgZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZveC4K
LSAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdzIG9uIFdpbmRvd3MsIHF1ZXJ5aW5nIHRo
ZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvcgotICAgIC8v
IHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNl
dHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncwotICAgIC8v
IG1ldHJpY3MuCisgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2Vk
LiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5CisgICAgLy8gZm9yIG5vdy4gIEl0IG1hdGNo
ZXMgRmlyZWZveC4gIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywKKyAgICAv
LyBxdWVyeWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50
cyBmb3IgdGhlIGhpZ2hlcgorICAgIC8vIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhv
bm9ycyBhIERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlCisgICAgLy8gY2FuJ3QgcmVseSBv
biB0aGUgdGhlbWUncyBtZXRyaWNzLgogICAgIGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOwog
ICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1HdGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50
TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfUkFESU9CVVRUT04sIG8sIGksIHJlY3QpOworICAgIHN0
YXRpYyBJbWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKCJsaW51eFJhZGlvT24iKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjb25z
dCB1bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhSYWRp
b09mZiIpLnJlbGVhc2VSZWYoKTsKKworICAgIEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hlY2tl
ZChvKSA/IGNoZWNrZWRJbWFnZSA6IHVuY2hlY2tlZEltYWdlOworICAgIGkuY29udGV4dC0+ZHJh
d0ltYWdlKGltYWdlLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAogewogICAgIC8vIFVzZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94IGFz
IGNoZWNrYm94LgogICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lk
IHBhaW50QnV0dG9uTGlrZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIHsKKyAg
ICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCk7CisgICAgU2tQYWludCBwYWludDsKKyAgICBTa1JlY3Qgc2tyZWN0OworICAgIGNv
bnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBi
b3R0b20gPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBJZiB0aGUgYnV0dG9u
IGlzIHRvbyBzbWFsbCwgZmFsbGJhY2sgdG8gZHJhd2luZyBhIHNpbmdsZSwgc29saWQgY29sb3IK
KyAgICBpZiAocmVjdC53aWR0aCgpIDwgNSB8fCByZWN0LmhlaWdodCgpIDwgNSkgeworICAgICAg
ICBwYWludC5zZXRBUkdCKDI1NSwgMHhlOSwgMHhlOSwgMHhlOSk7CisgICAgICAgIHNrcmVjdC5z
ZXQocmVjdC54KCksIHJlY3QueSgpLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgY2FudmFzLT5k
cmF3UmVjdChza3JlY3QsIHBhaW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
bnN0IGludCBib3JkZXJBbHBoYSA9IHRoZW1lLT5pc0hvdmVyZWQobykgPyAweDgwIDogMHg1NTsK
KyAgICBwYWludC5zZXRBUkdCKGJvcmRlckFscGhhLCAwLCAwLCAwKTsKKyAgICBjYW52YXMtPmRy
YXdMaW5lKHJlY3QueCgpICsgMSwgcmVjdC55KCksIHJpZ2h0IC0gMSwgcmVjdC55KCksIHBhaW50
KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJpZ2h0IC0gMSwgcmVjdC55KCkgKyAxLCByaWdodCAt
IDEsIGJvdHRvbSAtIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpICsg
MSwgYm90dG9tIC0gMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxLCBwYWludCk7CisgICAgY2FudmFz
LT5kcmF3TGluZShyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LngoKSwgYm90dG9tIC0gMSwg
cGFpbnQpOworCisgICAgcGFpbnQuc2V0QVJHQigyNTUsIDAsIDAsIDApOworICAgIFNrUG9pbnQg
cFsyXTsKKyAgICBjb25zdCBpbnQgbGlnaHRFbmQgPSB0aGVtZS0+aXNQcmVzc2VkKG8pID8gMSA6
IDA7CisgICAgY29uc3QgaW50IGRhcmtFbmQgPSAhbGlnaHRFbmQ7CisgICAgcFtsaWdodEVuZF0u
c2V0KFNrSW50VG9TY2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2NhbGFyKHJlY3QueSgpKSk7Cisg
ICAgcFtkYXJrRW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0LngoKSksIFNrSW50VG9TY2FsYXIo
Ym90dG9tIC0gMSkpOworICAgIFNrQ29sb3IgY29sb3JzWzJdOworICAgIGNvbG9yc1swXSA9IFNr
Q29sb3JTZXRBUkdCKDI1NSwgMHhmOCwgMHhmOCwgMHhmOCk7CisgICAgY29sb3JzWzFdID0gU2tD
b2xvclNldEFSR0IoMjU1LCAweGRkLCAweGRkLCAweGRkKTsKKworICAgIFNrU2hhZGVyKiBzID0g
U2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlTGluZWFyKAorICAgICAgICBwLCBjb2xvcnMsIE5VTEws
IDIsIFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGUsIE5VTEwpOworICAgIHBhaW50LnNldFN0eWxl
KFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKKyAgICBwYWludC5zZXRTaGFkZXIocyk7CisgICAgcy0+
dW5yZWYoKTsKKworICAgIHNrcmVjdC5zZXQocmVjdC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHJp
Z2h0IC0gMSwgYm90dG9tIC0gMSk7CisgICAgY2FudmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50
KTsKKworICAgIHBhaW50LnNldFNoYWRlcihOVUxMKTsKKyAgICBwYWludC5zZXRBUkdCKDI1NSwg
MHhjZSwgMHhjZSwgMHhjZSk7CisgICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCBy
ZWN0LnkoKSArIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdQb2ludChyaWdodCAtIDIsIHJl
Y3QueSgpICsgMSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJlY3QueCgpICsgMSwg
Ym90dG9tIC0gMiwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgYm90
dG9tIC0gMiwgcGFpbnQpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhp
cywgTU9aX0dUS19CVVRUT04sIG8sIGksIHJlY3QpOworICAgIHBhaW50QnV0dG9uTGlrZSh0aGlz
LCBvLCBpLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJl
dHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0VOVFJZLCBvLCBpLCByZWN0KTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludFNl
YXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvLCBpLCByZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRn
ZXQodGhpcywgTU9aX0dUS19DSEVDS01FTlVJVEVNLCBvLCBpLCByZWN0KTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAg
cmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfRFJPUERPV05fQVJST1csIG8sIGks
IHJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1H
dGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfQ0hF
Q0tNRU5VSVRFTSwgbywgaSwgcmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxl
bWVudCogZSkgY29uc3QKIHsKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8gb24gYWxs
IGJyb3dzZXJzLgogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0
aGlzLCBNT1pfR1RLX0RST1BET1dOLCBvLCBpLCByZWN0KTsKKyAgICBTa0NhbnZhcyogY29uc3Qg
Y2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgY29u
c3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IG1p
ZGRsZSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDI7CisKKyAgICBwYWludEJ1dHRvbkxp
a2UodGhpcywgbywgaSwgcmVjdCk7CisKKyAgICBTa1BhaW50IHBhaW50OworICAgIHBhaW50LnNl
dEFSR0IoMjU1LCAwLCAwLCAwKTsKKyAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAg
cGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOworCisgICAgU2tQYXRoIHBhdGg7
CisgICAgcGF0aC5tb3ZlVG8ocmlnaHQgLSAxMywgbWlkZGxlIC0gMyk7CisgICAgcGF0aC5yTGlu
ZVRvKDYsIDApOworICAgIHBhdGguckxpbmVUbygtMywgNik7CisgICAgcGF0aC5jbG9zZSgpOwor
ICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworCisgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RNZW51TGlz
dEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzZWxlY3Rv
ciwgc3R5bGUsIGUpOwogfQogCiAvLyBVc2VkIHRvIHBhaW50IHN0eWxlZCBtZW51bGlzdHMgKGku
ZS4gd2l0aCBhIG5vbi1kZWZhdWx0IGJvcmRlcikKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0
azo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1
cm4gcGFpbnRNZW51TGlzdChvLCBpLCByKTsKKyAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBp
LCByZWN0KTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgTGVmdFBh
ZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIFJpZ2h0
UGFkZGluZyk7CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRk
aW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIEJvdHRv
bVBhZGRpbmcpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFkanVzdEJ1dHRv
bklubmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OmFkanVzdEJ1dHRvbklubmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIC8vIFRoaXMgaW5uZXIgcGFkZGluZyBtYXRjaGVzIEZpcmVmb3guCiAgICAg
c3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDEsIEZpeGVkKSk7CkBAIC00NDMsNzUgKzM0NCwz
MiBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFkanVzdEJ1dHRvbklubmVyU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5n
dGgoMywgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpjb250cm9s
U3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0
KiBvKSBjb25zdAogewogICAgIHJldHVybiBpc0VuYWJsZWQobyk7CiB9CiAKLUNvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1HdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICBy
ZXR1cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXSk7
Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3Rr
VHJlZVZpZXcoKTsKLSAgICByZXR1cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPnRleHRbR1RL
X1NUQVRFX1NFTEVDVEVEXSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6Omlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAogewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAg
ICByZXR1cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX0FDVElWRV0p
OworICAgIHJldHVybiBDb2xvcigweDI4LCAweDI4LCAweDI4KTsKIH0KIAotQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+dGV4
dFtHVEtfU1RBVEVfQUNUSVZFXSk7CisgICAgcmV0dXJuIENvbG9yKDAsIDAsIDApOwogfQogCi1H
dGtXaWRnZXQqIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6Omd0a0VudHJ5KCkgY29uc3QKK0NvbG9y
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICBpZiAobV9ndGtFbnRyeSkKLSAgICAgICAgcmV0dXJu
IG1fZ3RrRW50cnk7Ci0KLSAgICBtX2d0a0VudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9ndGtFbnRyeSwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5
bGVTZXRDYWxsYmFjayksIHRoZW1lKCkpOwotICAgIGd0a19jb250YWluZXJfYWRkKGd0a0NvbnRh
aW5lcigpLCBtX2d0a0VudHJ5KTsKLSAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtFbnRyeSk7
Ci0KLSAgICByZXR1cm4gbV9ndGtFbnRyeTsKKyAgICByZXR1cm4gQ29sb3IoMHhjOCwgMHhjOCwg
MHhjOCk7CiB9CiAKLUd0a1dpZGdldCogUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6Z3RrVHJlZVZp
ZXcoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjppbmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIGlmIChtX2d0a1RyZWVW
aWV3KQotICAgICAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLQotICAgIG1fZ3RrVHJlZVZpZXcg
PSBndGtfdHJlZV92aWV3X25ldygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtUcmVlVmll
dywgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoZW1lKCkp
OwotICAgIGd0a19jb250YWluZXJfYWRkKGd0a0NvbnRhaW5lcigpLCBtX2d0a1RyZWVWaWV3KTsK
LSAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtUcmVlVmlldyk7Ci0KLSAgICByZXR1cm4gbV9n
dGtUcmVlVmlldzsKLX0KLQotR3RrQ29udGFpbmVyKiBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpn
dGtDb250YWluZXIoKSBjb25zdAotewotICAgIGlmIChtX2d0a0NvbnRhaW5lcikKLSAgICAgICAg
cmV0dXJuIG1fZ3RrQ29udGFpbmVyOwotCi0gICAgbV9ndGtXaW5kb3cgPSBndGtfd2luZG93X25l
dyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBtX2d0a0NvbnRhaW5lciA9IEdUS19DT05UQUlORVIo
Z3RrX2ZpeGVkX25ldygpKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1f
Z3RrV2luZG93KSwgR1RLX1dJREdFVChtX2d0a0NvbnRhaW5lcikpOwotICAgIGd0a193aWRnZXRf
cmVhbGl6ZShtX2d0a1dpbmRvdyk7Ci0KLSAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CisgICAg
cmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQg
cGFkZGluZ1R5cGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlz
dEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29u
c3QKIHsKICAgICAvLyBUaGlzIGludGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRpb24gdG8gdGhl
IHVzZXItc3VwcGxpZWQgcGFkZGluZy4KICAgICAvLyBNYXRjaGVzIHRoZSBGRiBiZWhhdmlvci4K
QEAgLTUyOSw0ICszODcsNCBAQCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6bWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZAogICAgIHJldHVybiBw
YWRkaW5nOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUd0
ay5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKc2ltaWxh
cml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUd0ay5oCnJlbmFtZSB0byBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXguaAppbmRleCA3N2Q5MjdmLi44MDc0NDFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKQEAgLTI1LDE5ICsyNSwxNyBAQAogICoKICAqLwog
Ci0jaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1HdGtfaAotI2RlZmluZSBSZW5kZXJUaGVtZUNo
cm9taXVtR3RrX2gKKyNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4X2gKKyNkZWZpbmUg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4X2gKIAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAK
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IFJlbmRlclRoZW1lQ2hyb21pdW1HdGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworICAgIGNsYXNz
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtR3RrKCk7Ci0gICAgICAgIH5SZW5kZXJU
aGVtZUNocm9taXVtR3RrKCkgeyB9CisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgp
OworICAgICAgICB+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCkgeyB9CiAKICAgICAgICAgdmly
dHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwogICAgICAgICB2aXJ0dWFsIFN0
cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKQEAgLTEwMCw3ICs5OCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Ao
UmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uSW5uZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uSW5uZXJTdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0
OwogCiAgICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0
cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgICAgICB2aXJ0dWFs
IGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CkBA
IC0xMTUsMjAgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBD
b2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIEhvbGQgdGhlIHN0YXRlCi0gICAgICAgIEd0a1dpZGdl
dCogZ3RrRW50cnkoKSBjb25zdDsKLSAgICAgICAgR3RrV2lkZ2V0KiBndGtUcmVlVmlldygpIGNv
bnN0OwotCi0gICAgICAgIC8vIFVubWFwcGVkIEdka1dpbmRvdyBoYXZpbmcgYSBjb250YWluZXIu
IFRoaXMgaXMgaG9sZGluZyBhbGwgb3VyIGZha2Ugd2lkZ2V0cwotICAgICAgICBHdGtDb250YWlu
ZXIqIGd0a0NvbnRhaW5lcigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1l
bnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBlKSBjb25z
dDsKLQotICAgICAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7Ci0gICAgICAgIG11
dGFibGUgR3RrQ29udGFpbmVyKiBtX2d0a0NvbnRhaW5lcjsKLSAgICAgICAgbXV0YWJsZSBHdGtX
aWRnZXQqIG1fZ3RrRW50cnk7Ci0gICAgICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1RyZWVW
aWV3OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="13775"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28194</attachid>
            <date>2009-03-02 13:18:00 -0800</date>
            <delta_ts>2009-03-02 17:26:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>40431</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWRmNjI1MS4uZjVhYzAyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAwOS0wMy0wMiAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gTGludXg6IFN3aXRjaCB0byB1c2luZyBTa2lhIHRvIHJlbmRl
ciB3aWRnZXRzLgorCisgICAgICAgIEluIG9yZGVyIHRvIHNhbmRib3ggdGhlIENocm9taXVtIHJl
bmRlcmVyIG9uIExpbnV4IHdlIG5lZWQgdG8gcmVtb3ZlIHRoZQorICAgICAgICBYIGNvbm5lY3Rp
b24uIEdUSyBjYW5ub3QgcmVuZGVyIHdpdGhvdXQgYW4gWCBjb25uZWN0aW9uIHNvLCBmb3Igbm93
LCB3ZQorICAgICAgICByZW5kZXIgd2lkZ2V0cyBvdXJzZWx2ZXMuCisKKyAgICAgICAgUHJldmlv
dXNseSB1c2UgZGlkbid0IGFudGktYWxpYXMgZm9udHMgaW4gb3JkZXIgdG8gbWF0Y2ggV2luZG93
cyBmb250CisgICAgICAgIHJlbmRlcmluZyBleGFjdGx5LiBUaGlzIHdhcyBoZWxwZnVsIHdoZW4g
Ym9vdHN0cmFwcGluZyBvdXIgbGF5b3V0CisgICAgICAgIHRlc3RzLiBOb3csIGhvd2V2ZXIsIHdl
IGFyZSByZWFkeSB0byBlbmFibGUgaXQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0MjQ0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW06OmJ1dHRvblNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja1BpZWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGh1bWIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXR1cFBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoUGxh
dGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChQbGF0Zm9y
bUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1HdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaDogQWRkZWQuCisKIDIwMDktMDMtMDIgIEFkYW0g
VHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXgg
Zm9yIFF0IHBvcnQuICBSZW1vdmUgdW5uZWNlc3NhcnkgYXNzZXJ0LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKaW5kZXggNGE1
NTgwNi4uNDI2YTA3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCkBAIC0xNjcsNiArMTY3LDExIEBAIGJvb2wgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bTo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQ
bGF0Zm9ybU1vdXNlCiAKIEludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6YnV0dG9uU2l6
ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyAgICAv
LyBPbiBMaW51eCwgd2UgZG9uJ3QgdXNlIGJ1dHRvbnMKKyAgICByZXR1cm4gSW50U2l6ZSgwLCAw
KTsKKyNlbmRpZgorCiAgICAgLy8gT3VyIGRlc2lyZWQgcmVjdCBpcyBlc3NlbnRpYWxseSB0aGlj
a25lc3MgYnkgdGhpY2tuZXNzLgogCiAgICAgLy8gT3VyIGFjdHVhbCByZWN0IHdpbGwgc2hyaW5r
IHRvIGhhbGYgdGhlIGF2YWlsYWJsZSBzcGFjZSB3aGVuIHdlIGhhdmUgPCAyCkBAIC0xNzUsMTgg
KzE4MCwxMyBAQCBJbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OmJ1dHRvblNpemUoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCiAKICAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tu
ZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CiAKLSNpZiAhZGVmaW5lZChfX2xpbnV4X18p
CiAgICAgLy8gSW4gbGF5b3V0IHRlc3QgbW9kZSwgd2UgZm9yY2UgdGhlIGJ1dHRvbiAiZ2lydGgi
IChpLmUuLCB0aGUgbGVuZ3RoIG9mCiAgICAgLy8gdGhlIGJ1dHRvbiBhbG9uZyB0aGUgYXhpcyBv
ZiB0aGUgc2Nyb2xsYmFyKSB0byBiZSBhIGZpeGVkIHNpemUuCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgcmV0YXJkZWQhICBzY3JvbGxiYXJUaGlja25lc3MgaXMgYWxyZWFkeSBmaXhlZCBpbiBsYXlv
dXQKICAgICAvLyB0ZXN0IG1vZGUgc28gdGhhdCBzaG91bGQgYmUgZW5vdWdoIHRvIHJlc3VsdCBp
biByZXBlYXRhYmxlIHJlc3VsdHMsIGJ1dAogICAgIC8vIHByZXNlcnZpbmcgdGhpcyBoYWNrIGF2
b2lkcyBoYXZpbmcgdG8gcmViYXNlbGluZSBwaXhlbCB0ZXN0cy4KICAgICBjb25zdCBpbnQga0xh
eW91dFRlc3RNb2RlR2lydGggPSAxNzsKLQogICAgIGludCBnaXJ0aCA9IENocm9taXVtQnJpZGdl
OjpsYXlvdXRUZXN0TW9kZSgpID8ga0xheW91dFRlc3RNb2RlR2lydGggOiB0aGlja25lc3M7Ci0j
ZWxzZQotICAgIGludCBnaXJ0aCA9IHRoaWNrbmVzczsKLSNlbmRpZgogCiAgICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGlu
dCB3aWR0aCA9IHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiBnaXJ0aCA/IHNjcm9sbGJhci0+d2lk
dGgoKSAvIDIgOiBnaXJ0aDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA5NWQwZjc4Li4xMWUyNDcy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJU
aGVtZUNocm9taXVtTGludXguY3BwCkBAIC0zNywyMSArMzcsMTEgQEAKICNpbmNsdWRlICJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCi0jaW5jbHVkZSAi
Z3RrZHJhd2luZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlICJza2lhL2V4dC9H
ZGtTa2lhLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW50IFNjcm9sbGJhclRoZW1lQ2hy
b21pdW06OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkKIHsKLSAgICBzdGF0aWMgaW50IHNpemUgPSAwOwotICAgIGlmICghc2l6ZSkgewotICAgICAg
ICBNb3pHdGtTY3JvbGxiYXJNZXRyaWNzIG1ldHJpY3M7Ci0gICAgICAgIG1vel9ndGtfZ2V0X3Nj
cm9sbGJhcl9tZXRyaWNzKCZtZXRyaWNzKTsKLSAgICAgICAgc2l6ZSA9IG1ldHJpY3Muc2xpZGVy
X3dpZHRoOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gMTU7CiB9CiAKIGJv
b2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6aW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKQpA
QCAtNjAsODkgKzUwLDgwIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6aW52YWxpZGF0
ZU9uTW91c2VFbnRlckV4aXQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gR2l2ZW4gYW4g
dW5pbml0aWFsaXNlZCB3aWRnZXQgc3RhdGUgb2JqZWN0LCBzZXQgdGhlIG1lbWJlcnMgc3VjaCB0
aGF0IGl0J3MKLS8vIHNhbmUgZm9yIGRyYXdpbmcgc2Nyb2xsYmFycwotc3RhdGljIHZvaWQgaW5p
dE1velN0YXRlKEd0a1dpZGdldFN0YXRlKiBtb3pTdGF0ZSkKLXsKLSAgICBtb3pTdGF0ZS0+YWN0
aXZlID0gdHJ1ZTsKLSAgICBtb3pTdGF0ZS0+Zm9jdXNlZCA9IGZhbHNlOwotICAgIG1velN0YXRl
LT5pbkhvdmVyID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmRpc2FibGVkID0gZmFsc2U7Ci0gICAg
bW96U3RhdGUtPmlzRGVmYXVsdCA9IGZhbHNlOwotICAgIG1velN0YXRlLT5jYW5EZWZhdWx0ID0g
ZmFsc2U7Ci0gICAgbW96U3RhdGUtPmRlcHJlc3NlZCA9IGZhbHNlOwotICAgIG1velN0YXRlLT5j
dXJwb3MgPSAwOwotICAgIG1velN0YXRlLT5tYXhwb3MgPSAwOwotfQotCi0vLyBQYWludCBhIEdU
SyB3aWRnZXQKLS8vICAgZ2M6IGNvbnRleHQgdG8gZHJhdyBvbnRvCi0vLyAgIHJlY3Q6IHRoZSBh
cmVhIG9mIHRoZSB3aWRnZXQKLS8vICAgd2lkZ2V0X3R5cGU6IHRoZSB0eXBlIG9mIHdpZGdldCB0
byBkcmF3Ci0vLyAgIGZsYWdzOiB3aWRnZXQgZGVwZW5kZW50IGZsYWdzIChlLmcuIGRpcmVjdGlv
biBvZiBzY3JvbGxiYXIgYXJyb3dzIGV0YykKLS8vCi0vLyBTZWUgcGFpbnRNb3pXaWdldCBpbiBS
ZW5kZXJUaGVtZUd0ay5jcHAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBjbGlwcGluZy4KLXN0
YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyV2lkZ2V0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0
IEludFJlY3QmIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtUaGVt
ZVdpZGdldFR5cGUgd2lkZ2V0X3R5cGUsIGdpbnQgZmxhZ3MpCi17Ci0gICAgUGxhdGZvcm1Db250
ZXh0U2tpYSogcGNzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgR2RrUmVjdGFuZ2xl
IGdka1JlY3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpIH07Ci0KLSAgICBjb25zdCBTa0lSZWN0IGNsaXBfcmVnaW9uID0gcGNzLT5jYW52YXMoKS0+
Z2V0VG90YWxDbGlwKCkuZ2V0Qm91bmRzKCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3Rt
ID0gZ2MtPmdldENUTSgpLmludmVyc2UoKTsKLSAgICBJbnRQb2ludCBwb3MgPSBjdG0ubWFwUG9p
bnQoCi0gICAgICAgIEludFBvaW50KFNrU2NhbGFyUm91bmQoY2xpcF9yZWdpb24uZkxlZnQpLCBT
a1NjYWxhclJvdW5kKGNsaXBfcmVnaW9uLmZUb3ApKSk7Ci0gICAgR2RrUmVjdGFuZ2xlIGdka0Ns
aXBSZWN0OwotICAgIGdka0NsaXBSZWN0LnggPSBwb3MueCgpOwotICAgIGdka0NsaXBSZWN0Lnkg
PSBwb3MueSgpOwotICAgIGdka0NsaXBSZWN0LndpZHRoID0gY2xpcF9yZWdpb24ud2lkdGgoKTsK
LSAgICBnZGtDbGlwUmVjdC5oZWlnaHQgPSBjbGlwX3JlZ2lvbi5oZWlnaHQoKTsKLQotICAgIGdk
a19yZWN0YW5nbGVfaW50ZXJzZWN0KCZnZGtSZWN0LCAmZ2RrQ2xpcFJlY3QsICZnZGtDbGlwUmVj
dCk7Ci0KLSAgICBHdGtXaWRnZXRTdGF0ZSBtb3pTdGF0ZTsKLSAgICBpbml0TW96U3RhdGUoJm1v
elN0YXRlKTsKLQotICAgIG1vel9ndGtfd2lkZ2V0X3BhaW50KHdpZGdldF90eXBlLCBwY3MtPmdk
a19za2lhKCksICZnZGtSZWN0LCAmZ2RrQ2xpcFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJm1velN0YXRlLCBmbGFncywgR1RLX1RFWFRfRElSX0xUUik7Ci19Ci0KIHZvaWQgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNj
cm9sbGJhciogc2Nyb2xsYmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSkKIHsK
LSAgICBjb25zdCBib29sIGhvcnogPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcjsKLSAgICBjb25zdCBHdGtUaGVtZVdpZGdldFR5cGUgdHJhY2tfdHlwZSA9
Ci0gICAgICAgIGhvcnogPyBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMIDogTU9a
X0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUw7Ci0gICAgcGFpbnRTY3JvbGxiYXJXaWRnZXQo
Z2MsIHJlY3QsIHRyYWNrX3R5cGUsIDApOwotfQorICAgIGNvbnN0IGludCByaWdodCA9IHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBib3R0b20gPSByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCk7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCk7CiAKLXZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRC
dXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxi
YXJQYXJ0IHBhcnQpCi17Ci0gICAgLy8gRklYTUU6IEl0IGFwcGVhcnMgdGhlIGVpdGhlciB3ZSdy
ZSB1cHNldHRpbmcgR1RLIGJ5IGZvcmNpbmcgV2ViS2l0IHNpemVzCi0gICAgLy8gb24gaXQsIG9y
IHRoZSBidXR0b25zIGV4cGVjdCB0aGUgdHJhY2sgdG8gYmUgZHJhd24gdW5kZXIgdGhlbS4gIEVp
dGhlcgotICAgIC8vIHdheSwgd2UgZW5kIHVwIHdpdGggdW5wYWludGVkIHBpeGVscyB3aGljaCBh
cmUgdXBzZXR0aW5nIHRoZSBwaXhlbAotICAgIC8vIHRlc3RzLiBUaHVzIHdlIHBhaW50IGdyZWVu
IHVuZGVyIHRoZSBidXR0b25zIHRvLCBhdCBsZWFzdCwgbWFrZSB0aGUKLSAgICAvLyBwaXhlbCBv
dXRwdXQgdGhlIHNhbWUgYmV0d2VlbiBkZWJ1ZyBhbmQgb3B0IGJ1aWxkcy4KICAgICBTa1BhaW50
IHBhaW50OwotICAgIHBhaW50LnNldEFSR0IoMjU1LCAwLCAyNTUsIDEyOCk7CisgICAgcGFpbnQu
c2V0QVJHQigweGZmLCAweGUzLCAweGRkLCAweGQ4KTsKICAgICBTa1JlY3Qgc2tyZWN0OwotICAg
IHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAt
IDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIDEpOwotICAgIGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOworICAgIHNrcmVjdC5zZXQo
cmVjdC54KCksIHJlY3QueSgpLCByaWdodCwgYm90dG9tKTsKKyAgICBjYW52YXMtPmRyYXdSZWN0
KHNrcmVjdCwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGM1LCAweGJhLCAw
eGIwKTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54KCks
IGJvdHRvbSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmlnaHQsIHJlY3QueSgpLCBy
aWdodCwgYm90dG9tLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwgcmVj
dC55KCksIHJpZ2h0LCByZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVj
dC54KCksIGJvdHRvbSwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOworfQogCi0gICAgY29uc3QgYm9v
bCBob3J6ID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7
Ci0gICAgZ2ludCBmbGFncyA9IGhvcnogPyAwIDogTU9aX0dUS19TVEVQUEVSX1ZFUlRJQ0FMOwot
ICAgIGZsYWdzIHw9IEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBhcnQgPyBNT1pfR1RLX1NURVBQ
RVJfRE9XTiA6IDA7Ci0gICAgcGFpbnRTY3JvbGxiYXJXaWRnZXQoZ2MsIHJlY3QsIE1PWl9HVEtf
U0NST0xMQkFSX0JVVFRPTiwgZmxhZ3MpOwordm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpw
YWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVj
dCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQoreworICAgIC8vIFdlIGRvbid0IHVzZSBidXR0b25zCiB9
CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRl
eHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAg
ICBjb25zdCBib29sIGhvcnogPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcjsKLSAgICBjb25zdCBHdGtUaGVtZVdpZGdldFR5cGUgdGh1bWJfdHlwZSA9Ci0g
ICAgICAgIGhvcnogPyBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJWk9OVEFMIDogTU9aX0dU
S19TQ1JPTExCQVJfVEhVTUJfVkVSVElDQUw7Ci0gICAgcGFpbnRTY3JvbGxiYXJXaWRnZXQoZ2Ms
IHJlY3QsIHRodW1iX3R5cGUsIDApOworICAgIGNvbnN0IGJvb2wgaG92ZXJlZCA9IHNjcm9sbGJh
ci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQ7CisgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVj
dC54KCkgKyByZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKTsKKyAgICBjb25zdCBpbnQgbWlkeCA9IHJlY3QueCgpICsgcmVjdC53aWR0
aCgpIC8gMjsKKyAgICBjb25zdCBpbnQgbWlkeSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAv
IDI7CisgICAgY29uc3QgYm9vbCB2ZXJ0aWNhbCA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgaWYg
KGhvdmVyZWQpCisgICAgICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhmZiwgMHhmZiwgMHhmZik7
CisgICAgZWxzZQorICAgICAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDB4ZjQsIDB4ZjIsIDB4ZWYp
OworCisgICAgU2tSZWN0IHNrcmVjdDsKKyAgICBpZiAodmVydGljYWwpIHsKKyAgICAgIHNrcmVj
dC5zZXQocmVjdC54KCksIHJlY3QueSgpLCBtaWR4ICsgMSwgYm90dG9tKTsKKyAgICB9IGVsc2Ug
eworICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJpZ2h0LCBtaWR5ICsgMSk7
CisgICAgfQorICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CisKKyAgICBpZiAo
aG92ZXJlZCkgeworICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGY0LCAweGYyLCAweGVmKTsK
KyAgICB9IGVsc2UgeworICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGVhLCAweGU1LCAweGUw
KTsKKyAgICB9CisgICAgaWYgKHZlcnRpY2FsKSB7CisgICAgICBza3JlY3Quc2V0KG1pZHggKyAx
LCByZWN0LnkoKSwgcmlnaHQsIGJvdHRvbSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHNrcmVjdC5z
ZXQocmVjdC54KCksIG1pZHkgKyAxLCByaWdodCwgYm90dG9tKTsKKyAgICB9CisgICAgY2FudmFz
LT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKKworICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHg5
ZCwgMHg5NiwgMHg4ZSk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwgcmVjdC55KCks
IHJlY3QueCgpLCBib3R0b20sIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJpZ2h0LCBy
ZWN0LnkoKSwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVj
dC54KCksIHJlY3QueSgpLCByaWdodCwgcmVjdC55KCksIHBhaW50KTsKKyAgICBjYW52YXMtPmRy
YXdMaW5lKHJlY3QueCgpLCBib3R0b20sIHJpZ2h0LCBib3R0b20sIHBhaW50KTsKKworICAgIGlm
IChyZWN0LmhlaWdodCgpID4gMTAgJiYgcmVjdC53aWR0aCgpID4gMTApIHsKKyAgICAgIHBhaW50
LnNldEFSR0IoMHhmZiwgMHg5ZCwgMHg5NiwgMHg4ZSk7CisgICAgICBjYW52YXMtPmRyYXdMaW5l
KG1pZHggLSAxLCBtaWR5LCBtaWR4ICsgMywgbWlkeSwgcGFpbnQpOworICAgICAgY2FudmFzLT5k
cmF3TGluZShtaWR4IC0gMSwgbWlkeSAtIDMsIG1pZHggKyAzLCBtaWR5IC0gMywgcGFpbnQpOwor
ICAgICAgY2FudmFzLT5kcmF3TGluZShtaWR4IC0gMSwgbWlkeSArIDMsIG1pZHggKyAzLCBtaWR5
ICsgMywgcGFpbnQpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRh
TGludXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZv
cm1EYXRhTGludXguY3BwCmluZGV4IDg2Zjk2ZWUuLjdiN2QxOTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXR1cFBh
aW50KFNrUGFpbnQqIHBhaW50KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0IHRzID0gbV90ZXh0
U2l6ZSA+IDAgPyBtX3RleHRTaXplIDogMTI7CiAKLSAgICBwYWludC0+c2V0QW50aUFsaWFzKGZh
bHNlKTsKKyAgICBwYWludC0+c2V0QW50aUFsaWFzKHRydWUpOwogICAgIHBhaW50LT5zZXRTdWJw
aXhlbFRleHQoZmFsc2UpOwogICAgIHBhaW50LT5zZXRUZXh0U2l6ZShTa0Zsb2F0VG9TY2FsYXIo
dHMpKTsKICAgICBwYWludC0+c2V0VHlwZWZhY2UobV90eXBlZmFjZSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5k
ZXggYzUxN2E5MS4uZTExZGZiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtNDYsMTAgKzQ2LDYgQEAKIAog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSNp
bmNsdWRlICJHZGtTa2lhLmgiCi0jZW5kaWYKLQogLy8gU3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
Ly8gRW5jYXBzdWxhdGVzIHRoZSBhZGRpdGlvbmFsIHBhaW50aW5nIHN0YXRlIGluZm9ybWF0aW9u
IHdlIHN0b3JlIGZvciBlYWNoCkBAIC0xODEsMTkgKzE3NywxMCBAQCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCiB7
CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3Rh
dGVTdGFjay5sYXN0KCk7Ci0jaWYgZGVmaW5lZChPU19MSU5VWCkKLSAgICBtX2dka3NraWEgPSBt
X2NhbnZhcyA/IGdka19za2lhX25ldyhtX2NhbnZhcykgOiAwOwotI2VuZGlmCiB9CiAKIFBsYXRm
b3JtQ29udGV4dFNraWE6On5QbGF0Zm9ybUNvbnRleHRTa2lhKCkKIHsKLSNpZiBkZWZpbmVkKE9T
X0xJTlVYKQotICAgIGlmIChtX2dka3NraWEpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9n
ZGtza2lhKTsKLSAgICAgICAgbV9nZGtza2lhID0gMDsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNh
bnZhcykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5oCmluZGV4IDllMzlkYTUuLjg4NTBhNmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtNDMsOCAr
NDMsNiBAQAogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi10eXBlZGVmIHN0cnVjdCBfR2Rr
RHJhd2FibGUgR2RrU2tpYTsKLQogLy8gVGhpcyBjbGFzcyBob2xkcyB0aGUgcGxhdGZvcm0tc3Bl
Y2lmaWMgc3RhdGUgZm9yIEdyYXBoaWNzQ29udGV4dC4gV2UgcHV0CiAvLyBtb3N0IG9mIG91ciBT
a2lhIHdyYXBwZXJzIG9uIHRoaXMgY2xhc3MuIEluIHRoZW9yeSwgYSBsb3Qgb2YgdGhpcyBzdHVm
ZiBjb3VsZAogLy8gYmUgbW92ZWQgdG8gR3JhcGhpY3NDb250ZXh0IGRpcmVjdGx5LCBleGNlcHQg
dGhhdCBzb21lIGNvZGUgZXh0ZXJuYWwgdG8gdGhpcwpAQCAtMTY3LDExICsxNjUsNiBAQCBwdWJs
aWM6CiAgICAgLy8gcG9zc2libGUgcXVhbGl0eS4KICAgICBib29sIGlzUHJpbnRpbmcoKTsKIAot
I2lmIGRlZmluZWQoX19saW51eF9fKQotICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgY2FtZWxDYXNl
LgotICAgIEdka1NraWEqIGdka19za2lhKCkgY29uc3QgeyByZXR1cm4gbV9nZGtza2lhOyB9Ci0j
ZW5kaWYKLQogcHJpdmF0ZToKICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgUExBVEZPUk0oV0lO
X09TKQogICAgIC8vIFVzZWQgd2hlbiByZXN0b3JpbmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4gaW1h
Z2UgY2xpcC4gT25seSBzaG93cyB0aGUgcGl4ZWxzIGluCkBAIC0xOTUsMTEgKzE4OCw2IEBAIHBy
aXZhdGU6CiAgICAgLy8gQ3VycmVudCBwYXRoIGluIGdsb2JhbCBjb29yZGluYXRlcy4KICAgICBT
a1BhdGggbV9wYXRoOwogCi0jaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gICAgLy8gQSBwb2ludGVy
IHRvIGEgR0RLIERyYXdhYmxlIHdyYXBwaW5nIG9mIHRoaXMgU2tpYSBjYW52YXMKLSAgICBHZGtT
a2lhKiBtX2dka3NraWE7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTl9PUykKICAgICBib29s
IG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1HdGsuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApzaW1pbGFyaXR5IGluZGV4IDI5JQpyZW5hbWUgZnJv
bSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmNwcApyZW5hbWUgdG8g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCAyMjBj
ZTA3Li4yYTA3OGNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtR3RrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TGludXguY3BwCkBAIC0yMiwyMSArMjIsMjEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5oIgorI2luY2x1ZGUgIlJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eC5oIgogCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKLSNpbmNsdWRl
ICJHZGtTa2lhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRl
ICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1
ZGUgIlNrU2hhZGVyLmgiCisjaW5jbHVkZSAiU2tHcmFkaWVudFNoYWRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDE2ICs0NywyMCBAQCBlbnVtIFBhZGRpbmdUeXBlIHsKICAg
ICBMZWZ0UGFkZGluZwogfTsKIAotc3RhdGljIGNvbnN0IGludCBzdHlsZWRNZW51TGlzdEludGVy
bmFsUGFkZGluZ1s0XSA9IHsgMSwgNCwgMSwgNCB9Oworc3RhdGljIGNvbnN0IGludCBzdHlsZWRN
ZW51TGlzdEludGVybmFsUGFkZGluZ1s0XSA9IHsgMSwgMTYsIDEsIDQgfTsKIAotLy8gVGhlIGRl
ZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiAgV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1
bHQgZm9udAotLy8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6
ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgotLy8gZm9ybSBjb250cm9sIGZvbnRzLgotc3Rh
dGljIGZsb2F0IERlZmF1bHRGb250U2l6ZSA9IDE2LjA7CitzdGF0aWMgYm9vbCBzdXBwb3J0c0Zv
Y3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCit7CisgICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0
IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdzIGZvciB1cy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAK
LXN0YXRpYyBDb2xvciBtYWtlQ29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCitzdGF0aWMgdm9pZCBz
ZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
LSAgICByZXR1cm4gQ29sb3IobWFrZVJHQihjLnJlZCA+PiA4LCBjLmdyZWVuID4+IDgsIGMuYmx1
ZSA+PiA4KSk7CisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisg
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIC8vIFdlIGFpbSB0byBtYXRjaCBJ
RSBoZXJlLgpAQCAtNzMsMjE0ICs3Nyw1OCBAQCBzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdEdV
SUZvbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiAiQXJpYWwiOwogfQogCi0vLyBD
b252ZXJ0cyBwb2ludHMgdG8gcGl4ZWxzLiAgT25lIHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaC4K
LXN0YXRpYyBmbG9hdCBwb2ludHNUb1BpeGVscyhmbG9hdCBwb2ludHMpCi17Ci0gICAgc3RhdGlj
IGZsb2F0IHBpeGVsc1BlckluY2ggPSAwLjBmOwotICAgIGlmICghcGl4ZWxzUGVySW5jaCkgewot
ICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAg
ICAgICAgLy8gRklYTUU6ICBJJ20gZ2V0dGluZyBmbG9hdGluZyBwb2ludCB2YWx1ZXMgb2Ygfjc1
IGFuZCB+MTAwLAotICAgICAgICAvLyBhbmQgaXQncyBtYWtpbmcgbXkgZm9udHMgbG9vayBhbGwg
d3JvbmcuICBGaWd1cmUgdGhpcyBvdXQuCi0jaWYgMAotICAgICAgICBpZiAoc2NyZWVuKQotICAg
ICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IGdka19zY3JlZW5fZ2V0X3Jlc29sdXRpb24oc2NyZWVu
KTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBwaXhlbHNQZXJJbmNoID0gOTYu
MGY7IC8vIE1hdGNoIHRoZSBkZWZhdWx0IHdlIHNldCBvbiBXaW5kb3dzLgotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgcmV0dXJuIHBv
aW50cyAvIHBvaW50c1BlckluY2ggKiBwaXhlbHNQZXJJbmNoOwotfQotCi1zdGF0aWMgdm9pZCBz
ZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgaWYgKHN0eWxl
LT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6
ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250
cm9sUGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZp
ZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFy
dDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNl
IENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIEd0a1RleHREaXJlY3Rpb24gZ3Rr
VGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgewotICAgIGNhc2UgUlRMOgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JU
TDsKLSAgICBjYXNlIExUUjoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9MVFI7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9OT05FOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgc2V0TW96U3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtXaWRnZXRTdGF0
ZSogc3RhdGUsIFJlbmRlck9iamVjdCogbykKLXsKLSAgICBzdGF0ZS0+YWN0aXZlID0gdGhlbWUt
PmlzUHJlc3NlZChvKTsKLSAgICBzdGF0ZS0+Zm9jdXNlZCA9IHRoZW1lLT5pc0ZvY3VzZWQobyk7
Ci0gICAgc3RhdGUtPmluSG92ZXIgPSB0aGVtZS0+aXNIb3ZlcmVkKG8pOwotICAgIC8vIEZJWE1F
OiBEaXNhYmxlZCBkb2VzIG5vdCBhbHdheXMgZ2l2ZSB0aGUgY29ycmVjdCBhcHBlYXJhbmNlIGZv
ciBSZWFkT25seQotICAgIHN0YXRlLT5kaXNhYmxlZCA9ICF0aGVtZS0+aXNFbmFibGVkKG8pIHx8
IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvKTsKLSAgICBzdGF0ZS0+aXNEZWZhdWx0ID0gZmFs
c2U7Ci0gICAgc3RhdGUtPmNhbkRlZmF1bHQgPSBmYWxzZTsKLSAgICBzdGF0ZS0+ZGVwcmVzc2Vk
ID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIHBhaW50TW96V2lkZ2V0KFJlbmRlclRoZW1lKiB0
aGVtZSwgR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8g
UGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVzdCBjbGFpbSB0byBoYXZlIHN1Y2NlZWRlZAotICAg
IGlmIChpLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgR3RrV2lkZ2V0U3RhdGUgbW96U3RhdGU7Ci0gICAgc2V0TW96U3RhdGUodGhlbWUs
ICZtb3pTdGF0ZSwgbyk7Ci0KLSAgICBpbnQgZmxhZ3M7Ci0KLSAgICAvLyBXZSBtaWdodCB3YW50
IHRvIG1ha2Ugc2V0dGluZyBmbGFncyB0aGUgY2FsbGVyJ3Mgam9iIGF0IHNvbWUgcG9pbnQgcmF0
aGVyIHRoYW4gZG9pbmcgaXQgaGVyZS4KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE1P
Wl9HVEtfQlVUVE9OOgotICAgICAgICBmbGFncyA9IEdUS19SRUxJRUZfTk9STUFMOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfQ0hFQ0tCVVRUT046Ci0gICAgY2FzZSBNT1pfR1RL
X1JBRElPQlVUVE9OOgotICAgICAgICBmbGFncyA9IHRoZW1lLT5pc0NoZWNrZWQobyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZsYWdzID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzID0gaS5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGNzLT5jYW52YXMoKTsK
LSAgICBpZiAoIWNhbnZhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR2RrUmVjdGFu
Z2xlIGdka1JlY3Q7Ci0gICAgZ2RrUmVjdC54ID0gcmVjdC54KCk7Ci0gICAgZ2RrUmVjdC55ID0g
cmVjdC55KCk7Ci0gICAgZ2RrUmVjdC53aWR0aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBnZGtSZWN0
LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAvLyBnZXRUb3RhbENsaXAgcmV0dXJucyB0
aGUgY3VycmVudGx5IHNldCBjbGlwIHJlZ2lvbiBpbiBkZXZpY2UgY29vcmRpbmF0ZXMsCi0gICAg
Ly8gc28gd2UgaGF2ZSB0byBhcHBseSB0aGUgY3VycmVudCB0cmFuc2Zvcm0gKGFjdHVhbGx5IHdl
IG9ubHkgc3VwcG9ydCB0cmFuc2xhdGlvbnMpCi0gICAgLy8gdG8gZ2V0IHRoZSBwYWdlIGNvb3Jk
aW5hdGVzIHRoYXQgb3VyIGd0ayB3aWRnZXQgcmVuZGVyaW5nIGV4cGVjdHMuCi0gICAgLy8gV2Ug
aW52ZXJ0IGl0IGJlY2F1c2Ugd2Ugd2FudCB0byBtYXAgZnJvbSBkZXZpY2UgY29vcmRpbmF0ZXMg
dG8gcGFnZSBjb29yZGluYXRlcy4KLSAgICBjb25zdCBTa0lSZWN0IGNsaXBSZWdpb24gPSBjYW52
YXMtPmdldFRvdGFsQ2xpcCgpLmdldEJvdW5kcygpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGN0bSA9IGkuY29udGV4dC0+Z2V0Q1RNKCkuaW52ZXJzZSgpOwotICAgIEludFBvaW50IHBvcyA9
IGN0bS5tYXBQb2ludChJbnRQb2ludChTa1NjYWxhclJvdW5kKGNsaXBSZWdpb24uZkxlZnQpLCBT
a1NjYWxhclJvdW5kKGNsaXBSZWdpb24uZlRvcCkpKTsKLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ2xp
cFJlY3Q7Ci0gICAgZ2RrQ2xpcFJlY3QueCA9IHBvcy54KCk7Ci0gICAgZ2RrQ2xpcFJlY3QueSA9
IHBvcy55KCk7Ci0gICAgZ2RrQ2xpcFJlY3Qud2lkdGggPSBjbGlwUmVnaW9uLndpZHRoKCk7Ci0g
ICAgZ2RrQ2xpcFJlY3QuaGVpZ2h0ID0gY2xpcFJlZ2lvbi5oZWlnaHQoKTsKLQotICAgIC8vIG1v
el9ndGtfd2lkZ2V0X3BhaW50IHdpbGwgcGFpbnQgb3V0c2lkZSB0aGUgYm91bmRzIG9mIGdka1Jl
Y3QgdW5sZXNzIHdlIGZ1cnRoZXIgcmVzdHJpY3QgfGdka0NsaXBSZWN0fC4KLSAgICBnZGtfcmVj
dGFuZ2xlX2ludGVyc2VjdCgmZ2RrUmVjdCwgJmdka0NsaXBSZWN0LCAmZ2RrQ2xpcFJlY3QpOwot
Ci0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBndGtUZXh0RGlyZWN0aW9uKG8tPnN0
eWxlKCktPmRpcmVjdGlvbigpKTsKLQotICAgIHJldHVybiBtb3pfZ3RrX3dpZGdldF9wYWludCh0
eXBlLCBwY3MtPmdka19za2lhKCksICZnZGtSZWN0LCAmZ2RrQ2xpcFJlY3QsICZtb3pTdGF0ZSwg
ZmxhZ3MsIGRpcmVjdGlvbikgIT0gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBn
dGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMs
IFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKLXsKLSAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRo
aXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkgdGltZXMgZm9yIGEgc2luZ2xlIEdU
Sysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KLSAgICByZW5kZXJUaGVtZS0+cGxhdGZvcm1Db2xvcnNE
aWRDaGFuZ2UoKTsKLX0KLQotc3RhdGljIGRvdWJsZSBxdWVyeVN5c3RlbUJsaW5rSW50ZXJ2YWwo
ZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkKLXsKLSAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBn
dGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLQotICAgIGdib29sZWFuIHNob3VsZEJsaW5rOwot
ICAgIGdpbnQgdGltZTsKLQotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1jdXJzb3It
YmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJsaW5rLXRpbWUiLCAmdGltZSwgTlVM
TCk7Ci0KLSAgICBpZiAoIXNob3VsZEJsaW5rKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiB0aW1lIC8gMTAwMC4wOwotfQotCi0vLyBJbXBsZW1lbnQgV2ViQ29yZTo6dGhlbWUoKSBm
b3IgZ2V0dGluZyB0aGUgZ2xvYmFsIFJlbmRlclRoZW1lLgogUmVuZGVyVGhlbWUqIHRoZW1lKCkK
IHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWVDaHJvbWl1bUd0ayBndGtUaGVtZTsKLSAgICByZXR1
cm4gJmd0a1RoZW1lOworICAgIHN0YXRpYyBSZW5kZXJUaGVtZUNocm9taXVtTGludXggdGhlbWU7
CisgICAgcmV0dXJuICZ0aGVtZTsKIH0KIAotUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6UmVuZGVy
VGhlbWVDaHJvbWl1bUd0aygpCi0gICAgOiBtX2d0a1dpbmRvdygwKQotICAgICwgbV9ndGtDb250
YWluZXIoMCkKLSAgICAsIG1fZ3RrRW50cnkoMCkKLSAgICAsIG1fZ3RrVHJlZVZpZXcoMCkKK1Jl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCkKIHsKIH0K
IAogLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNz
LgotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQo
KQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVl
dCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotU3RyaW5nIFJlbmRlclRo
ZW1lQ2hyb21pdW1HdGs6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCitTdHJpbmcgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQogewogICAgIHJldHVybiBT
dHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5R
dWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHls
ZS0+YXBwZWFyYW5jZSgpKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJl
dHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdKTsK
KyAgICByZXR1cm4gQ29sb3IoMHgxZSwgMHg5MCwgMHhmZik7CiB9CiAKLUNvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1HdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIG1ha2VDb2xvcih3aWRnZXQtPnN0eWxlLT5iYXNl
W0dUS19TVEFURV9BQ1RJVkVdKTsKKyAgICByZXR1cm4gQ29sb3IoMHhjOCwgMHhjOCwgMHhjOCk7
CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAg
IEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLSAgICByZXR1cm4gbWFrZUNvbG9yKHdp
ZGdldC0+c3R5bGUtPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXSk7CisgICAgcmV0dXJuIENvbG9y
KDAsIDAsIDApOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVy
biBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXSk7CisgICAg
cmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNo
cm9taXVtR3RrOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0CitDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDE1MCk7CisgICAgcmV0
dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgLy8gRGlzYWJs
ZSB0aGUgYmxpbmtpbmcgY2FyZXQgaW4gbGF5b3V0IHRlc3QgbW9kZSwgYXMgaXQgaW50cm9kdWNl
cwogICAgIC8vIGEgcmFjZSBjb25kaXRpb24gZm9yIHRoZSBwaXhlbCB0ZXN0cy4gaHR0cDovL2Iv
MTE5ODQ0MApAQCAtMjg4LDE1MyArMTM2LDIwNiBAQCBkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1
bUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBXZSBjYWNoZSB0aGUgaW50ZXJ2YWwgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXBlYXRlZGx5
IHJlcXVlc3QgaXQgZnJvbSBndGsuCi0gICAgc3RhdGljIGRvdWJsZSBibGlua0ludGVydmFsID0g
cXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKFJlbmRlclRoZW1lOjpjYXJldEJsaW5rSW50ZXJ2YWwo
KSk7Ci0gICAgcmV0dXJuIGJsaW5rSW50ZXJ2YWw7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBEb2N1bWVudCogZG9jdW1lbnQsIEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAgIGNvbnN0IGNoYXIqIGZh
Y2VOYW1lID0gMDsKLSAgICBmbG9hdCBmb250U2l6ZSA9IDA7Ci0gICAgLy8gRklYTUU6IHNlZSBh
bHNvIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAg
ICBjYXNlIENTU1ZhbHVlTWVudToKLSAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgotICAgIGNh
c2UgQ1NTVmFsdWVTbWFsbENhcHRpb246Ci0gICAgICAgIC8vIHRyaWdnZXJlZCBieSBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9jc3MyLXN5c3RlbS1mb250cy5odG1sCi0gICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJv
bDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgotICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRDb250cm9sOgotICAgICAgICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250KGRvY3Vt
ZW50KTsKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/ICBCZWNhdXNlIHRoYXQncyB3
aGF0IEdlY2tvIGRvZXMuCi0gICAgICAgIGZvbnRTaXplID0gRGVmYXVsdEZvbnRTaXplIC0gcG9p
bnRzVG9QaXhlbHMoMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZh
Y2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoZG9jdW1lbnQpOwotICAgICAgICBmb250U2l6ZSA9IERl
ZmF1bHRGb250U2l6ZTsKLSAgICB9CisgICAgcmV0dXJuIDAuNTsKK30KIAotICAgIC8vIE9ubHkg
dXBkYXRlIGlmIHRoZSBzaXplIG1ha2VzIHNlbnNlLgotICAgIGlmIChmb250U2l6ZSA+IDApIHsK
LSAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGZhY2VOYW1l
KTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwot
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1p
bHkpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwp
OwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKLSAgICB9Cit2b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBEb2N1bWVu
dCogZG9jdW1lbnQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorewor
ICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9u
dChOVUxMKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoMTIpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0
azo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtR3RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBw
YWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0NIRUNLQlVUVE9OLCBvLCBpLCByZWN0KTsKKyAg
ICBzdGF0aWMgSW1hZ2UqIGNvbnN0IGNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgibGludXhDaGVja2JveE9uIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFn
ZSogY29uc3QgdW5jaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxp
bnV4Q2hlY2tib3hPZmYiKS5yZWxlYXNlUmVmKCk7CisKKyAgICBJbWFnZSogaW1hZ2UgPSB0aGlz
LT5pc0NoZWNrZWQobykgPyBjaGVja2VkSW1hZ2UgOiB1bmNoZWNrZWRJbWFnZTsKKyAgICBpLmNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgcmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c2V0Q2hlY2tib3hT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgog
ICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogIEEgaGFy
ZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3Nhcnkg
Zm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZveC4KLSAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNl
dHRpbmdzIG9uIFdpbmRvd3MsIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIg
c2l6ZSB0aGF0IGFjY291bnRzIGZvcgotICAgIC8vIHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3Vy
IGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2Fu
J3QgcmVseSBvbiB0aGUgdGhlbWUncwotICAgIC8vIG1ldHJpY3MuCisgICAgLy8gRklYTUU6ICBB
IGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNz
YXJ5CisgICAgLy8gZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZveC4gIEF0IGRpZmZlcmVudCBE
UEkgc2V0dGluZ3Mgb24gV2luZG93cywKKyAgICAvLyBxdWVyeWluZyB0aGUgdGhlbWUgZ2l2ZXMg
eW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IgdGhlIGhpZ2hlcgorICAgIC8vIERQ
SS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90aGVyIHRo
YW4gOTYsIHdlCisgICAgLy8gY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncyBtZXRyaWNzLgogICAg
IGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOwogICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNp
emUpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50UmFkaW8oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFJhZGlvKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfUkFE
SU9CVVRUT04sIG8sIGksIHJlY3QpOworICAgIHN0YXRpYyBJbWFnZSogY29uc3QgY2hlY2tlZElt
YWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT24iKS5yZWxlYXNl
UmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjb25zdCB1bmNoZWNrZWRJbWFnZSA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhSYWRpb09mZiIpLnJlbGVhc2VSZWYoKTsKKworICAg
IEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hlY2tlZChvKSA/IGNoZWNrZWRJbWFnZSA6IHVuY2hl
Y2tlZEltYWdlOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6c2V0UmFkaW9T
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIC8vIFVz
ZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94IGFzIGNoZWNrYm94LgogICAgIHNldENoZWNrYm94
U2l6ZShzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShSZW5kZXJUaGVt
ZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHJlY3QpIHsKKyAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0g
aS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgU2tQYWludCBwYWlu
dDsKKyAgICBTa1JlY3Qgc2tyZWN0OworICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsg
cmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBib3R0b20gPSByZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCk7CisKKyAgICAvLyBJZiB0aGUgYnV0dG9uIGlzIHRvbyBzbWFsbCwgZmFsbGJhY2sgdG8g
ZHJhd2luZyBhIHNpbmdsZSwgc29saWQgY29sb3IKKyAgICBpZiAocmVjdC53aWR0aCgpIDwgNSB8
fCByZWN0LmhlaWdodCgpIDwgNSkgeworICAgICAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDB4ZTks
IDB4ZTksIDB4ZTkpOworICAgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmln
aHQsIGJvdHRvbSk7CisgICAgICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgYm9yZGVyQWxwaGEgPSB0aGVt
ZS0+aXNIb3ZlcmVkKG8pID8gMHg4MCA6IDB4NTU7CisgICAgcGFpbnQuc2V0QVJHQihib3JkZXJB
bHBoYSwgMCwgMCwgMCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSArIDEsIHJlY3Qu
eSgpLCByaWdodCAtIDEsIHJlY3QueSgpLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShy
aWdodCAtIDEsIHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSArIDEsIGJvdHRvbSAtIDEsIHJpZ2h0IC0gMSwg
Ym90dG9tIC0gMSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCksIHJlY3Qu
eSgpICsgMSwgcmVjdC54KCksIGJvdHRvbSAtIDEsIHBhaW50KTsKKworICAgIHBhaW50LnNldEFS
R0IoMHhmZiwgMCwgMCwgMCk7CisgICAgU2tQb2ludCBwWzJdOworICAgIGNvbnN0IGludCBsaWdo
dEVuZCA9IHRoZW1lLT5pc1ByZXNzZWQobykgPyAxIDogMDsKKyAgICBjb25zdCBpbnQgZGFya0Vu
ZCA9ICFsaWdodEVuZDsKKyAgICBwW2xpZ2h0RW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0Lngo
KSksIFNrSW50VG9TY2FsYXIocmVjdC55KCkpKTsKKyAgICBwW2RhcmtFbmRdLnNldChTa0ludFRv
U2NhbGFyKHJlY3QueCgpKSwgU2tJbnRUb1NjYWxhcihib3R0b20gLSAxKSk7CisgICAgU2tDb2xv
ciBjb2xvcnNbMl07CisgICAgY29sb3JzWzBdID0gU2tDb2xvclNldEFSR0IoMHhmZiwgMHhmOCwg
MHhmOCwgMHhmOCk7CisgICAgY29sb3JzWzFdID0gU2tDb2xvclNldEFSR0IoMHhmZiwgMHhkZCwg
MHhkZCwgMHhkZCk7CisKKyAgICBTa1NoYWRlciogcyA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0
ZUxpbmVhcigKKyAgICAgICAgcCwgY29sb3JzLCBOVUxMLCAyLCBTa1NoYWRlcjo6a0NsYW1wX1Rp
bGVNb2RlLCBOVUxMKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7
CisgICAgcGFpbnQuc2V0U2hhZGVyKHMpOworICAgIHMtPnVucmVmKCk7CisKKyAgICBza3JlY3Qu
c2V0KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyAxLCByaWdodCAtIDEsIGJvdHRvbSAtIDEpOwor
ICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CisKKyAgICBwYWludC5zZXRTaGFk
ZXIoTlVMTCk7CisgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGNlLCAweGNlLCAweGNlKTsKKyAg
ICBjYW52YXMtPmRyYXdQb2ludChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwgcGFpbnQpOwor
ICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgcmVjdC55KCkgKyAxLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCBib3R0b20gLSAyLCBwYWludCk7Cisg
ICAgY2FudmFzLT5kcmF3UG9pbnQocmlnaHQgLSAyLCBib3R0b20gLSAyLCBwYWludCk7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0JVVFRPTiwgbywg
aSwgcmVjdCk7CisgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJlY3QpOworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRo
aXMsIE1PWl9HVEtfRU5UUlksIG8sIGksIHJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHJlY3QpOworICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0NIRUNL
TUVOVUlURU0sIG8sIGksIHJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1HdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQo
dGhpcywgTU9aX0dUS19EUk9QRE9XTl9BUlJPVywgbywgaSwgcmVjdCk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1
cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9aX0dUS19DSEVDS01FTlVJVEVNLCBvLCBpLCByZWN0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjph
ZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAogewogICAg
IC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3NlcnMuCiAgICAgc3R5bGUt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfRFJPUERPV04s
IG8sIGksIHJlY3QpOworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgbWlkZGxlID0gcmVjdC55KCkgKyByZWN0
LmhlaWdodCgpIC8gMjsKKworICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsK
KworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgcGFpbnQuc2V0QVJHQigweGZmLCAwLCAwLCAwKTsK
KyAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWlu
dDo6a0ZpbGxfU3R5bGUpOworCisgICAgU2tQYXRoIHBhdGg7CisgICAgcGF0aC5tb3ZlVG8ocmln
aHQgLSAxMywgbWlkZGxlIC0gMyk7CisgICAgcGF0aC5yTGluZVRvKDYsIDApOworICAgIHBhdGgu
ckxpbmVUbygtMywgNik7CisgICAgcGF0aC5jbG9zZSgpOworICAgIGNhbnZhcy0+ZHJhd1BhdGgo
cGF0aCwgcGFpbnQpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1HdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
CiB7CiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogfQogCiAv
LyBVc2VkIHRvIHBhaW50IHN0eWxlZCBtZW51bGlzdHMgKGkuZS4gd2l0aCBhIG5vbi1kZWZhdWx0
IGJvcmRlcikKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVudUxp
c3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBp
LCByKTsKKyAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBpLCByZWN0KTsKIH0KIAotaW50IFJl
bmRlclRoZW1lQ2hyb21pdW1HdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cEludGVy
bmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBt
ZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgTGVmdFBhZGRpbmcpOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cEludGVy
bmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4g
bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIFJpZ2h0UGFkZGluZyk7CiB9CiAKLWludCBS
ZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cEludGVy
bmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1l
bnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRkaW5nKTsKIH0KIAotaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1HdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4g
bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIEJvdHRvbVBhZGRpbmcpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFkanVzdEJ1dHRvbklubmVyU3R5bGUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdEJ1
dHRvbklubmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIC8vIFRoaXMg
aW5uZXIgcGFkZGluZyBtYXRjaGVzIEZpcmVmb3guCiAgICAgc3R5bGUtPnNldFBhZGRpbmdUb3Ao
TGVuZ3RoKDEsIEZpeGVkKSk7CkBAIC00NDMsNzUgKzM0NCwzMiBAQCB2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1HdGs6OmFkanVzdEJ1dHRvbklubmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoMywgRml4ZWQpKTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6Y29u
dHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIHJl
dHVybiBpc0VuYWJsZWQobyk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gbWFrZUNvbG9yKHdpZGdl
dC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1HdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1
cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXSk7Ci19
Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gbWFrZUNvbG9yKHdp
ZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX0FDVElWRV0pOworICAgIHJldHVybiBDb2xvcigw
eDI4LCAweDI4LCAweDI4KTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6aW5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAg
IHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXSk7
CisgICAgcmV0dXJuIENvbG9yKDAsIDAsIDApOwogfQogCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1l
Q2hyb21pdW1HdGs6Omd0a0VudHJ5KCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsK
LSAgICBpZiAobV9ndGtFbnRyeSkKLSAgICAgICAgcmV0dXJuIG1fZ3RrRW50cnk7Ci0KLSAgICBt
X2d0a0VudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtF
bnRyeSwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoZW1l
KCkpOwotICAgIGd0a19jb250YWluZXJfYWRkKGd0a0NvbnRhaW5lcigpLCBtX2d0a0VudHJ5KTsK
LSAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtFbnRyeSk7Ci0KLSAgICByZXR1cm4gbV9ndGtF
bnRyeTsKKyAgICByZXR1cm4gQ29sb3IoMHhjOCwgMHhjOCwgMHhjOCk7CiB9CiAKLUd0a1dpZGdl
dCogUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6Z3RrVHJlZVZpZXcoKSBjb25zdAorQ29sb3IgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAogewotICAgIGlmIChtX2d0a1RyZWVWaWV3KQotICAgICAgICByZXR1cm4g
bV9ndGtUcmVlVmlldzsKLQotICAgIG1fZ3RrVHJlZVZpZXcgPSBndGtfdHJlZV92aWV3X25ldygp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtUcmVlVmlldywgInN0eWxlLXNldCIsIEdfQ0FM
TEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoZW1lKCkpOwotICAgIGd0a19jb250YWluZXJf
YWRkKGd0a0NvbnRhaW5lcigpLCBtX2d0a1RyZWVWaWV3KTsKLSAgICBndGtfd2lkZ2V0X3JlYWxp
emUobV9ndGtUcmVlVmlldyk7Ci0KLSAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLX0KLQotR3Rr
Q29udGFpbmVyKiBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpndGtDb250YWluZXIoKSBjb25zdAot
ewotICAgIGlmIChtX2d0a0NvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrQ29udGFpbmVy
OwotCi0gICAgbV9ndGtXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsK
LSAgICBtX2d0a0NvbnRhaW5lciA9IEdUS19DT05UQUlORVIoZ3RrX2ZpeGVkX25ldygpKTsKLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fZ3RrV2luZG93KSwgR1RLX1dJREdF
VChtX2d0a0NvbnRhaW5lcikpOwotICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a1dpbmRvdyk7
Ci0KLSAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CisgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4
MzIsIDB4MzIpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6bWVudUxpc3RJbnRl
cm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKIHsKICAgICAvLyBUaGlzIGlu
dGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzZXItc3VwcGxpZWQgcGFkZGlu
Zy4KICAgICAvLyBNYXRjaGVzIHRoZSBGRiBiZWhhdmlvci4KQEAgLTUyOSw0ICszODcsNCBAQCBp
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVy
U3R5bGUqIHN0eWxlLCBpbnQgcGFkZAogICAgIHJldHVybiBwYWRkaW5nOwogfQogCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1l
IGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5oCnJlbmFtZSB0
byBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAppbmRleCA3N2Q5
MjdmLi44MDc0NDFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtR3RrLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmgKQEAgLTI1LDE5ICsyNSwxNyBAQAogICoKICAqLwogCi0jaWZuZGVmIFJlbmRlclRoZW1l
Q2hyb21pdW1HdGtfaAotI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtR3RrX2gKKyNpZm5kZWYg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4X2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4X2gKIAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAKLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1H
dGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiAgICAgcHVibGljOgotICAgICAgICBSZW5kZXJU
aGVtZUNocm9taXVtR3RrKCk7Ci0gICAgICAgIH5SZW5kZXJUaGVtZUNocm9taXVtR3RrKCkgeyB9
CisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpOworICAgICAgICB+UmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4KCkgeyB9CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZh
dWx0U3R5bGVTaGVldCgpOwogICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxl
U2hlZXQoKTsKQEAgLTEwMCw3ICs5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5
bGUqKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uSW5uZXJTdHls
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uSW5uZXJTdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRv
dyBoYXMgZm9jdXMgb3Igbm90LgogICAgICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRz
VGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CkBAIC0xMTUsMjAgKzExMyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IC8vIEhvbGQgdGhlIHN0YXRlCi0gICAgICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsK
LSAgICAgICAgR3RrV2lkZ2V0KiBndGtUcmVlVmlldygpIGNvbnN0OwotCi0gICAgICAgIC8vIFVu
bWFwcGVkIEdka1dpbmRvdyBoYXZpbmcgYSBjb250YWluZXIuIFRoaXMgaXMgaG9sZGluZyBhbGwg
b3VyIGZha2Ugd2lkZ2V0cwotICAgICAgICBHdGtDb250YWluZXIqIGd0a0NvbnRhaW5lcigpIGNv
bnN0OwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5n
KFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBlKSBjb25zdDsKLQotICAgICAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtXaW5kb3c7Ci0gICAgICAgIG11dGFibGUgR3RrQ29udGFpbmVyKiBt
X2d0a0NvbnRhaW5lcjsKLSAgICAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrRW50cnk7Ci0g
ICAgICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1RyZWVWaWV3OwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="13781"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28206</attachid>
            <date>2009-03-02 17:26:18 -0800</date>
            <delta_ts>2009-03-02 17:26:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>40120</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTFhOWQ4ZS4uNzRiMDMxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAwOS0wMy0wMiAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gTGludXg6IFN3aXRjaCB0byB1c2luZyBTa2lhIHRvIHJlbmRl
ciB3aWRnZXRzLgorCisgICAgICAgIEluIG9yZGVyIHRvIHNhbmRib3ggdGhlIENocm9taXVtIHJl
bmRlcmVyIG9uIExpbnV4IHdlIG5lZWQgdG8gcmVtb3ZlIHRoZQorICAgICAgICBYIGNvbm5lY3Rp
b24uIEdUSyBjYW5ub3QgcmVuZGVyIHdpdGhvdXQgYW4gWCBjb25uZWN0aW9uIHNvLCBmb3Igbm93
LCB3ZQorICAgICAgICByZW5kZXIgd2lkZ2V0cyBvdXJzZWx2ZXMuCisKKyAgICAgICAgUHJldmlv
dXNseSB1c2UgZGlkbid0IGFudGktYWxpYXMgZm9udHMgaW4gb3JkZXIgdG8gbWF0Y2ggV2luZG93
cyBmb250CisgICAgICAgIHJlbmRlcmluZyBleGFjdGx5LiBUaGlzIHdhcyBoZWxwZnVsIHdoZW4g
Ym9vdHN0cmFwcGluZyBvdXIgbGF5b3V0CisgICAgICAgIHRlc3RzLiBOb3csIGhvd2V2ZXIsIHdl
IGFyZSByZWFkeSB0byBlbmFibGUgaXQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0MjQ0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW06OmJ1dHRvblNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6cGFpbnRUcmFja1BpZWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50VGh1bWIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXR1cFBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoUGxh
dGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChQbGF0Zm9y
bUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1HdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaDogQWRkZWQuCisKIDIwMDktMDMtMDIgIEtldmlu
IE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgQnVpbGQgZml4
ZXMgZm9yIHd4V2lkZ2V0cyBNYWMgdHJ1bmsgYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcAppbmRleCA0YTU1ODA2Li40
MjZhMDc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bS5jcHAKQEAgLTE2Nyw2ICsxNjcsMTEgQEAgYm9vbCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3Jt
TW91c2UKIAogSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpidXR0b25TaXplKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQogeworI2lmIGRlZmluZWQoX19saW51eF9fKQorICAgIC8vIE9uIExp
bnV4LCB3ZSBkb24ndCB1c2UgYnV0dG9ucworICAgIHJldHVybiBJbnRTaXplKDAsIDApOworI2Vu
ZGlmCisKICAgICAvLyBPdXIgZGVzaXJlZCByZWN0IGlzIGVzc2VudGlhbGx5IHRoaWNrbmVzcyBi
eSB0aGlja25lc3MuCiAKICAgICAvLyBPdXIgYWN0dWFsIHJlY3Qgd2lsbCBzaHJpbmsgdG8gaGFs
ZiB0aGUgYXZhaWxhYmxlIHNwYWNlIHdoZW4gd2UgaGF2ZSA8IDIKQEAgLTE3NSwxOCArMTgwLDEz
IEBAIEludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6YnV0dG9uU2l6ZShTY3JvbGxiYXIq
IHNjcm9sbGJhcikKIAogICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKIAotI2lmICFkZWZpbmVkKF9fbGludXhfXykKICAgICAv
LyBJbiBsYXlvdXQgdGVzdCBtb2RlLCB3ZSBmb3JjZSB0aGUgYnV0dG9uICJnaXJ0aCIgKGkuZS4s
IHRoZSBsZW5ndGggb2YKICAgICAvLyB0aGUgYnV0dG9uIGFsb25nIHRoZSBheGlzIG9mIHRoZSBz
Y3JvbGxiYXIpIHRvIGJlIGEgZml4ZWQgc2l6ZS4KICAgICAvLyBGSVhNRTogVGhpcyBpcyByZXRh
cmRlZCEgIHNjcm9sbGJhclRoaWNrbmVzcyBpcyBhbHJlYWR5IGZpeGVkIGluIGxheW91dAogICAg
IC8vIHRlc3QgbW9kZSBzbyB0aGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gcmVzdWx0IGluIHJlcGVh
dGFibGUgcmVzdWx0cywgYnV0CiAgICAgLy8gcHJlc2VydmluZyB0aGlzIGhhY2sgYXZvaWRzIGhh
dmluZyB0byByZWJhc2VsaW5lIHBpeGVsIHRlc3RzLgogICAgIGNvbnN0IGludCBrTGF5b3V0VGVz
dE1vZGVHaXJ0aCA9IDE3OwotCiAgICAgaW50IGdpcnRoID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91
dFRlc3RNb2RlKCkgPyBrTGF5b3V0VGVzdE1vZGVHaXJ0aCA6IHRoaWNrbmVzczsKLSNlbHNlCi0g
ICAgaW50IGdpcnRoID0gdGhpY2tuZXNzOwotI2VuZGlmCiAKICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIGdpcnRoID8gc2Nyb2xsYmFyLT53aWR0aCgpIC8g
MiA6IGdpcnRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxi
YXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IDk1ZDBmNzguLjExZTI0NzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxp
bnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eC5jcHAKQEAgLTM3LDIxICszNywxMSBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKLSNpbmNsdWRlICJndGtkcmF3
aW5nLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgInNraWEvZXh0L0dka1NraWEu
aCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bTo6
c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewot
ICAgIHN0YXRpYyBpbnQgc2l6ZSA9IDA7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIE1vekd0
a1Njcm9sbGJhck1ldHJpY3MgbWV0cmljczsKLSAgICAgICAgbW96X2d0a19nZXRfc2Nyb2xsYmFy
X21ldHJpY3MoJm1ldHJpY3MpOwotICAgICAgICBzaXplID0gbWV0cmljcy5zbGlkZXJfd2lkdGg7
Ci0gICAgfQotICAgIHJldHVybiBzaXplOworICAgIHJldHVybiAxNTsKIH0KIAogYm9vbCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtOjppbnZhbGlkYXRlT25Nb3VzZUVudGVyRXhpdCgpCkBAIC02MCw4
OSArNTAsODAgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjppbnZhbGlkYXRlT25Nb3Vz
ZUVudGVyRXhpdCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBHaXZlbiBhbiB1bmluaXRp
YWxpc2VkIHdpZGdldCBzdGF0ZSBvYmplY3QsIHNldCB0aGUgbWVtYmVycyBzdWNoIHRoYXQgaXQn
cwotLy8gc2FuZSBmb3IgZHJhd2luZyBzY3JvbGxiYXJzCi1zdGF0aWMgdm9pZCBpbml0TW96U3Rh
dGUoR3RrV2lkZ2V0U3RhdGUqIG1velN0YXRlKQotewotICAgIG1velN0YXRlLT5hY3RpdmUgPSB0
cnVlOwotICAgIG1velN0YXRlLT5mb2N1c2VkID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmluSG92
ZXIgPSBmYWxzZTsKLSAgICBtb3pTdGF0ZS0+ZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBtb3pTdGF0
ZS0+aXNEZWZhdWx0ID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmNhbkRlZmF1bHQgPSBmYWxzZTsK
LSAgICBtb3pTdGF0ZS0+ZGVwcmVzc2VkID0gZmFsc2U7Ci0gICAgbW96U3RhdGUtPmN1cnBvcyA9
IDA7Ci0gICAgbW96U3RhdGUtPm1heHBvcyA9IDA7Ci19Ci0KLS8vIFBhaW50IGEgR1RLIHdpZGdl
dAotLy8gICBnYzogY29udGV4dCB0byBkcmF3IG9udG8KLS8vICAgcmVjdDogdGhlIGFyZWEgb2Yg
dGhlIHdpZGdldAotLy8gICB3aWRnZXRfdHlwZTogdGhlIHR5cGUgb2Ygd2lkZ2V0IHRvIGRyYXcK
LS8vICAgZmxhZ3M6IHdpZGdldCBkZXBlbmRlbnQgZmxhZ3MgKGUuZy4gZGlyZWN0aW9uIG9mIHNj
cm9sbGJhciBhcnJvd3MgZXRjKQotLy8KLS8vIFNlZSBwYWludE1veldpZ2V0IGluIFJlbmRlclRo
ZW1lR3RrLmNwcCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGNsaXBwaW5nLgotc3RhdGljIHZv
aWQgcGFpbnRTY3JvbGxiYXJXaWRnZXQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVj
dCYgcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1RoZW1lV2lkZ2V0
VHlwZSB3aWRnZXRfdHlwZSwgZ2ludCBmbGFncykKLXsKLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lh
KiBwY3MgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2RrUmVj
dCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsK
LQotICAgIGNvbnN0IFNrSVJlY3QgY2xpcF9yZWdpb24gPSBwY3MtPmNhbnZhcygpLT5nZXRUb3Rh
bENsaXAoKS5nZXRCb3VuZHMoKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBnYy0+
Z2V0Q1RNKCkuaW52ZXJzZSgpOwotICAgIEludFBvaW50IHBvcyA9IGN0bS5tYXBQb2ludCgKLSAg
ICAgICAgSW50UG9pbnQoU2tTY2FsYXJSb3VuZChjbGlwX3JlZ2lvbi5mTGVmdCksIFNrU2NhbGFy
Um91bmQoY2xpcF9yZWdpb24uZlRvcCkpKTsKLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ2xpcFJlY3Q7
Ci0gICAgZ2RrQ2xpcFJlY3QueCA9IHBvcy54KCk7Ci0gICAgZ2RrQ2xpcFJlY3QueSA9IHBvcy55
KCk7Ci0gICAgZ2RrQ2xpcFJlY3Qud2lkdGggPSBjbGlwX3JlZ2lvbi53aWR0aCgpOwotICAgIGdk
a0NsaXBSZWN0LmhlaWdodCA9IGNsaXBfcmVnaW9uLmhlaWdodCgpOwotCi0gICAgZ2RrX3JlY3Rh
bmdsZV9pbnRlcnNlY3QoJmdka1JlY3QsICZnZGtDbGlwUmVjdCwgJmdka0NsaXBSZWN0KTsKLQot
ICAgIEd0a1dpZGdldFN0YXRlIG1velN0YXRlOwotICAgIGluaXRNb3pTdGF0ZSgmbW96U3RhdGUp
OwotCi0gICAgbW96X2d0a193aWRnZXRfcGFpbnQod2lkZ2V0X3R5cGUsIHBjcy0+Z2RrX3NraWEo
KSwgJmdka1JlY3QsICZnZGtDbGlwUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmbW96
U3RhdGUsIGZsYWdzLCBHVEtfVEVYVF9ESVJfTFRSKTsKLX0KLQogdm9pZCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtOjpwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlKQogewotICAgIGNv
bnN0IGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyOwotICAgIGNvbnN0IEd0a1RoZW1lV2lkZ2V0VHlwZSB0cmFja190eXBlID0KLSAgICAg
ICAgaG9yeiA/IE1PWl9HVEtfU0NST0xMQkFSX1RSQUNLX0hPUklaT05UQUwgOiBNT1pfR1RLX1ND
Uk9MTEJBUl9UUkFDS19WRVJUSUNBTDsKLSAgICBwYWludFNjcm9sbGJhcldpZGdldChnYywgcmVj
dCwgdHJhY2tfdHlwZSwgMCk7Ci19CisgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyBy
ZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsgcmVjdC5oZWln
aHQoKTsKKyAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKTsKIAotdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludEJ1dHRvbihH
cmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQg
cGFydCkKLXsKLSAgICAvLyBGSVhNRTogSXQgYXBwZWFycyB0aGUgZWl0aGVyIHdlJ3JlIHVwc2V0
dGluZyBHVEsgYnkgZm9yY2luZyBXZWJLaXQgc2l6ZXMKLSAgICAvLyBvbiBpdCwgb3IgdGhlIGJ1
dHRvbnMgZXhwZWN0IHRoZSB0cmFjayB0byBiZSBkcmF3biB1bmRlciB0aGVtLiAgRWl0aGVyCi0g
ICAgLy8gd2F5LCB3ZSBlbmQgdXAgd2l0aCB1bnBhaW50ZWQgcGl4ZWxzIHdoaWNoIGFyZSB1cHNl
dHRpbmcgdGhlIHBpeGVsCi0gICAgLy8gdGVzdHMuIFRodXMgd2UgcGFpbnQgZ3JlZW4gdW5kZXIg
dGhlIGJ1dHRvbnMgdG8sIGF0IGxlYXN0LCBtYWtlIHRoZQotICAgIC8vIHBpeGVsIG91dHB1dCB0
aGUgc2FtZSBiZXR3ZWVuIGRlYnVnIGFuZCBvcHQgYnVpbGRzLgogICAgIFNrUGFpbnQgcGFpbnQ7
Ci0gICAgcGFpbnQuc2V0QVJHQigyNTUsIDAsIDI1NSwgMTI4KTsKKyAgICBwYWludC5zZXRBUkdC
KDB4ZmYsIDB4ZTMsIDB4ZGQsIDB4ZDgpOwogICAgIFNrUmVjdCBza3JlY3Q7Ci0gICAgc2tyZWN0
LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVj
dC55KCkgKyByZWN0LmhlaWdodCgpIC0gMSk7Ci0gICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CisgICAgc2tyZWN0LnNldChyZWN0Lngo
KSwgcmVjdC55KCksIHJpZ2h0LCBib3R0b20pOworICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0
LCBwYWludCk7CisKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDB4YzUsIDB4YmEsIDB4YjApOwor
ICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSwgYm90dG9t
LCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyaWdodCwgcmVjdC55KCksIHJpZ2h0LCBi
b3R0b20sIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0LnkoKSwg
cmlnaHQsIHJlY3QueSgpLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwg
Ym90dG9tLCByaWdodCwgYm90dG9tLCBwYWludCk7Cit9CiAKLSAgICBjb25zdCBib29sIGhvcnog
PSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBn
aW50IGZsYWdzID0gaG9yeiA/IDAgOiBNT1pfR1RLX1NURVBQRVJfVkVSVElDQUw7Ci0gICAgZmxh
Z3MgfD0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCA/IE1PWl9HVEtfU1RFUFBFUl9ET1dO
IDogMDsKLSAgICBwYWludFNjcm9sbGJhcldpZGdldChnYywgcmVjdCwgTU9aX0dUS19TQ1JPTExC
QVJfQlVUVE9OLCBmbGFncyk7Cit2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW06OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3Jv
bGxiYXJQYXJ0IHBhcnQpCit7CisgICAgLy8gV2UgZG9uJ3QgdXNlIGJ1dHRvbnMKIH0KIAogdm9p
ZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2Ms
IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGNvbnN0
IGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyOwotICAgIGNvbnN0IEd0a1RoZW1lV2lkZ2V0VHlwZSB0aHVtYl90eXBlID0KLSAgICAgICAg
aG9yeiA/IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX0hPUklaT05UQUwgOiBNT1pfR1RLX1NDUk9M
TEJBUl9USFVNQl9WRVJUSUNBTDsKLSAgICBwYWludFNjcm9sbGJhcldpZGdldChnYywgcmVjdCwg
dGh1bWJfdHlwZSwgMCk7CisgICAgY29uc3QgYm9vbCBob3ZlcmVkID0gc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IFRodW1iUGFydDsKKyAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSAr
IHJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpOworICAgIGNvbnN0IGludCBtaWR4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAy
OworICAgIGNvbnN0IGludCBtaWR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMjsKKyAg
ICBjb25zdCBib29sIHZlcnRpY2FsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsU2Nyb2xsYmFyOworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOworCisgICAgU2tQYWludCBwYWludDsKKyAgICBpZiAoaG92ZXJl
ZCkKKyAgICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGZmLCAweGZmLCAweGZmKTsKKyAgICBl
bHNlCisgICAgICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhmNCwgMHhmMiwgMHhlZik7CisKKyAg
ICBTa1JlY3Qgc2tyZWN0OworICAgIGlmICh2ZXJ0aWNhbCkgeworICAgICAgc2tyZWN0LnNldChy
ZWN0LngoKSwgcmVjdC55KCksIG1pZHggKyAxLCBib3R0b20pOworICAgIH0gZWxzZSB7CisgICAg
ICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmlnaHQsIG1pZHkgKyAxKTsKKyAgICB9
CisgICAgY2FudmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKKworICAgIGlmIChob3ZlcmVk
KSB7CisgICAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDB4ZjQsIDB4ZjIsIDB4ZWYpOworICAgIH0g
ZWxzZSB7CisgICAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDB4ZWEsIDB4ZTUsIDB4ZTApOworICAg
IH0KKyAgICBpZiAodmVydGljYWwpIHsKKyAgICAgIHNrcmVjdC5zZXQobWlkeCArIDEsIHJlY3Qu
eSgpLCByaWdodCwgYm90dG9tKTsKKyAgICB9IGVsc2UgeworICAgICAgc2tyZWN0LnNldChyZWN0
LngoKSwgbWlkeSArIDEsIHJpZ2h0LCBib3R0b20pOworICAgIH0KKyAgICBjYW52YXMtPmRyYXdS
ZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweDlkLCAweDk2
LCAweDhlKTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54
KCksIGJvdHRvbSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmlnaHQsIHJlY3QueSgp
LCByaWdodCwgYm90dG9tLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwg
cmVjdC55KCksIHJpZ2h0LCByZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUo
cmVjdC54KCksIGJvdHRvbSwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOworCisgICAgaWYgKHJlY3Qu
aGVpZ2h0KCkgPiAxMCAmJiByZWN0LndpZHRoKCkgPiAxMCkgeworICAgICAgcGFpbnQuc2V0QVJH
QigweGZmLCAweDlkLCAweDk2LCAweDhlKTsKKyAgICAgIGNhbnZhcy0+ZHJhd0xpbmUobWlkeCAt
IDEsIG1pZHksIG1pZHggKyAzLCBtaWR5LCBwYWludCk7CisgICAgICBjYW52YXMtPmRyYXdMaW5l
KG1pZHggLSAxLCBtaWR5IC0gMywgbWlkeCArIDMsIG1pZHkgLSAzLCBwYWludCk7CisgICAgICBj
YW52YXMtPmRyYXdMaW5lKG1pZHggLSAxLCBtaWR5ICsgMywgbWlkeCArIDMsIG1pZHkgKyAzLCBw
YWludCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5jcHAKaW5kZXggODZmOTZlZS4uN2I3ZDE5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNw
cApAQCAtODYsNyArODYsNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldHVwUGFpbnQoU2tQ
YWludCogcGFpbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgdHMgPSBtX3RleHRTaXplID4g
MCA/IG1fdGV4dFNpemUgOiAxMjsKIAotICAgIHBhaW50LT5zZXRBbnRpQWxpYXMoZmFsc2UpOwor
ICAgIHBhaW50LT5zZXRBbnRpQWxpYXModHJ1ZSk7CiAgICAgcGFpbnQtPnNldFN1YnBpeGVsVGV4
dChmYWxzZSk7CiAgICAgcGFpbnQtPnNldFRleHRTaXplKFNrRmxvYXRUb1NjYWxhcih0cykpOwog
ICAgIHBhaW50LT5zZXRUeXBlZmFjZShtX3R5cGVmYWNlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCBjNTE3
YTkxLi5lMTFkZmIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC00NiwxMCArNDYsNiBAQAogCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIGRlZmluZWQoX19saW51eF9fKQotI2luY2x1ZGUg
Ikdka1NraWEuaCIKLSNlbmRpZgotCiAvLyBTdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFbmNh
cHN1bGF0ZXMgdGhlIGFkZGl0aW9uYWwgcGFpbnRpbmcgc3RhdGUgaW5mb3JtYXRpb24gd2Ugc3Rv
cmUgZm9yIGVhY2gKQEAgLTE4MSwxOSArMTc3LDEwIEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBs
YXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKIHsKICAgICBt
X3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAgIG1fZ2Rrc2tpYSA9IG1fY2FudmFz
ID8gZ2RrX3NraWFfbmV3KG1fY2FudmFzKSA6IDA7Ci0jZW5kaWYKIH0KIAogUGxhdGZvcm1Db250
ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraWEoKQogewotI2lmIGRlZmluZWQoT1NfTElOVVgp
Ci0gICAgaWYgKG1fZ2Rrc2tpYSkgewotICAgICAgICBnX29iamVjdF91bnJlZihtX2dka3NraWEp
OwotICAgICAgICBtX2dka3NraWEgPSAwOwotICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmgKaW5kZXggOWUzOWRhNS4uODg1MGE2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC00Myw4ICs0Myw2IEBA
CiAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9HZGtEcmF3YWJs
ZSBHZGtTa2lhOwotCiAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBz
dGF0ZSBmb3IgR3JhcGhpY3NDb250ZXh0LiBXZSBwdXQKIC8vIG1vc3Qgb2Ygb3VyIFNraWEgd3Jh
cHBlcnMgb24gdGhpcyBjbGFzcy4gSW4gdGhlb3J5LCBhIGxvdCBvZiB0aGlzIHN0dWZmIGNvdWxk
CiAvLyBiZSBtb3ZlZCB0byBHcmFwaGljc0NvbnRleHQgZGlyZWN0bHksIGV4Y2VwdCB0aGF0IHNv
bWUgY29kZSBleHRlcm5hbCB0byB0aGlzCkBAIC0xNjcsMTEgKzE2NSw2IEBAIHB1YmxpYzoKICAg
ICAvLyBwb3NzaWJsZSBxdWFsaXR5LgogICAgIGJvb2wgaXNQcmludGluZygpOwogCi0jaWYgZGVm
aW5lZChfX2xpbnV4X18pCi0gICAgLy8gRklYTUU6IHNob3VsZCBiZSBjYW1lbENhc2UuCi0gICAg
R2RrU2tpYSogZ2RrX3NraWEoKSBjb25zdCB7IHJldHVybiBtX2dka3NraWE7IH0KLSNlbmRpZgot
CiBwcml2YXRlOgogI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBQTEFURk9STShXSU5fT1MpCiAg
ICAgLy8gVXNlZCB3aGVuIHJlc3RvcmluZyBhbmQgdGhlIHN0YXRlIGhhcyBhbiBpbWFnZSBjbGlw
LiBPbmx5IHNob3dzIHRoZSBwaXhlbHMgaW4KQEAgLTE5NSwxMSArMTg4LDYgQEAgcHJpdmF0ZToK
ICAgICAvLyBDdXJyZW50IHBhdGggaW4gZ2xvYmFsIGNvb3JkaW5hdGVzLgogICAgIFNrUGF0aCBt
X3BhdGg7CiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSAgICAvLyBBIHBvaW50ZXIgdG8gYSBH
REsgRHJhd2FibGUgd3JhcHBpbmcgb2YgdGhpcyBTa2lhIGNhbnZhcwotICAgIEdka1NraWEqIG1f
Z2Rrc2tpYTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOX09TKQogICAgIGJvb2wgbV9kcmF3
aW5nVG9JbWFnZUJ1ZmZlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bUd0ay5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguY3BwCnNpbWlsYXJpdHkgaW5kZXggMjglCnJlbmFtZSBmcm9tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1HdGsuY3BwCnJlbmFtZSB0byBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IDRiZjMwYzAuLjgy
MWU1MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1H
dGsuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5j
cHAKQEAgLTIyLDIxICsyMiwyMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW5kZXJUaGVtZUNocm9taXVtR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4LmgiCiAKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiZ3RrZHJhd2luZy5oIgotI2luY2x1ZGUgIkdka1Nr
aWEuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlVzZXJB
Z2VudFN0eWxlU2hlZXRzLmgiCiAKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiU2tT
aGFkZXIuaCIKKyNpbmNsdWRlICJTa0dyYWRpZW50U2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDcsMTYgKzQ3LDIwIEBAIGVudW0gUGFkZGluZ1R5cGUgewogICAgIExlZnRQ
YWRkaW5nCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRk
aW5nWzRdID0geyAxLCA0LCAxLCA0IH07CitzdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVMaXN0
SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCAxNiwgMSwgNCB9OwogCi0vLyBUaGUgZGVmYXVsdCB2
YXJpYWJsZS13aWR0aCBmb250IHNpemUuICBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBmb250
Ci0vLyBzaXplIGZvciB0aGUgInN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBzaXplICh3aGlj
aCB3ZSB0aGVuIHNocmluaykgZm9yCi0vLyBmb3JtIGNvbnRyb2wgZm9udHMuCi1zdGF0aWMgZmxv
YXQgRGVmYXVsdEZvbnRTaXplID0gMTYuMDsKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSkKK3sKKyAgICAvLyBUaGlzIGNhdXNlcyBXZWJLaXQgdG8gZHJh
dyB0aGUgZm9jdXMgcmluZ3MgZm9yIHVzLgorICAgIHJldHVybiBmYWxzZTsKK30KIAotc3RhdGlj
IENvbG9yIG1ha2VDb2xvcihjb25zdCBHZGtDb2xvciYgYykKK3N0YXRpYyB2b2lkIHNldFNpemVJ
ZkF1dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJl
dHVybiBDb2xvcihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVlID4+IDgp
KTsKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgaWYgKHN0
eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
c2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAogLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUu
CkBAIC03MywyMTQgKzc3LDU4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0R1VJRm9udChE
b2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuICJBcmlhbCI7CiB9CiAKLS8vIENvbnZlcnRz
IHBvaW50cyB0byBwaXhlbHMuICBPbmUgcG9pbnQgaXMgMS83MiBvZiBhbiBpbmNoLgotc3RhdGlj
IGZsb2F0IHBvaW50c1RvUGl4ZWxzKGZsb2F0IHBvaW50cykKLXsKLSAgICBzdGF0aWMgZmxvYXQg
cGl4ZWxzUGVySW5jaCA9IDAuMGY7Ci0gICAgaWYgKCFwaXhlbHNQZXJJbmNoKSB7Ci0gICAgICAg
IEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotICAgICAgICAv
LyBGSVhNRTogIEknbSBnZXR0aW5nIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBvZiB+NzUgYW5kIH4x
MDAsCi0gICAgICAgIC8vIGFuZCBpdCdzIG1ha2luZyBteSBmb250cyBsb29rIGFsbCB3cm9uZy4g
IEZpZ3VyZSB0aGlzIG91dC4KLSNpZiAwCi0gICAgICAgIGlmIChzY3JlZW4pCi0gICAgICAgICAg
ICBwaXhlbHNQZXJJbmNoID0gZ2RrX3NjcmVlbl9nZXRfcmVzb2x1dGlvbihzY3JlZW4pOwotICAg
ICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHBpeGVsc1BlckluY2ggPSA5Ni4wZjsgLy8g
TWF0Y2ggdGhlIGRlZmF1bHQgd2Ugc2V0IG9uIFdpbmRvd3MuCi0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0IGZsb2F0IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKLSAgICByZXR1cm4gcG9pbnRzIC8g
cG9pbnRzUGVySW5jaCAqIHBpeGVsc1BlckluY2g7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFNpemVJ
ZkF1dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0
IGFwcGVhcmFuY2UpCi17Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBUZXh0RmllbGRQYXJ0
OgotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAg
IGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgIGNhc2UgQ2hlY2ti
b3hQYXJ0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi1zdGF0aWMgR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGly
ZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7Ci0gICAgY2FzZSBSVEw6Ci0gICAgICAgIHJldHVybiBHVEtfVEVYVF9ESVJfUlRMOwotICAg
IGNhc2UgTFRSOgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX0xUUjsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX05PTkU7Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZCBzZXRNb3pTdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1dpZGdldFN0YXRlKiBzdGF0
ZSwgUmVuZGVyT2JqZWN0KiBvKQotewotICAgIHN0YXRlLT5hY3RpdmUgPSB0aGVtZS0+aXNQcmVz
c2VkKG8pOwotICAgIHN0YXRlLT5mb2N1c2VkID0gdGhlbWUtPmlzRm9jdXNlZChvKTsKLSAgICBz
dGF0ZS0+aW5Ib3ZlciA9IHRoZW1lLT5pc0hvdmVyZWQobyk7Ci0gICAgLy8gRklYTUU6IERpc2Fi
bGVkIGRvZXMgbm90IGFsd2F5cyBnaXZlIHRoZSBjb3JyZWN0IGFwcGVhcmFuY2UgZm9yIFJlYWRP
bmx5Ci0gICAgc3RhdGUtPmRpc2FibGVkID0gIXRoZW1lLT5pc0VuYWJsZWQobykgfHwgdGhlbWUt
PmlzUmVhZE9ubHlDb250cm9sKG8pOwotICAgIHN0YXRlLT5pc0RlZmF1bHQgPSBmYWxzZTsKLSAg
ICBzdGF0ZS0+Y2FuRGVmYXVsdCA9IGZhbHNlOwotICAgIHN0YXRlLT5kZXByZXNzZWQgPSBmYWxz
ZTsKLX0KLQotc3RhdGljIGJvb2wgcGFpbnRNb3pXaWRnZXQoUmVuZGVyVGhlbWUqIHRoZW1lLCBH
dGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBQYWludGlu
ZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVkCi0gICAgaWYgKGku
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBHdGtXaWRnZXRTdGF0ZSBtb3pTdGF0ZTsKLSAgICBzZXRNb3pTdGF0ZSh0aGVtZSwgJm1velN0
YXRlLCBvKTsKLQotICAgIGludCBmbGFnczsKLQotICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gbWFr
ZSBzZXR0aW5nIGZsYWdzIHRoZSBjYWxsZXIncyBqb2IgYXQgc29tZSBwb2ludCByYXRoZXIgdGhh
biBkb2luZyBpdCBoZXJlLgotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTU9aX0dUS19C
VVRUT046Ci0gICAgICAgIGZsYWdzID0gR1RLX1JFTElFRl9OT1JNQUw7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTU9aX0dUS19DSEVDS0JVVFRPTjoKLSAgICBjYXNlIE1PWl9HVEtfUkFESU9C
VVRUT046Ci0gICAgICAgIGZsYWdzID0gdGhlbWUtPmlzQ2hlY2tlZChvKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZmxhZ3MgPSAwOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MgPSBpLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwY3MtPmNhbnZhcygpOwotICAgIGlm
ICghY2FudmFzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2Rr
UmVjdDsKLSAgICBnZGtSZWN0LnggPSByZWN0LngoKTsKLSAgICBnZGtSZWN0LnkgPSByZWN0Lnko
KTsKLSAgICBnZGtSZWN0LndpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIGdka1JlY3QuaGVpZ2h0
ID0gcmVjdC5oZWlnaHQoKTsKLQotICAgIC8vIGdldFRvdGFsQ2xpcCByZXR1cm5zIHRoZSBjdXJy
ZW50bHkgc2V0IGNsaXAgcmVnaW9uIGluIGRldmljZSBjb29yZGluYXRlcywKLSAgICAvLyBzbyB3
ZSBoYXZlIHRvIGFwcGx5IHRoZSBjdXJyZW50IHRyYW5zZm9ybSAoYWN0dWFsbHkgd2Ugb25seSBz
dXBwb3J0IHRyYW5zbGF0aW9ucykKLSAgICAvLyB0byBnZXQgdGhlIHBhZ2UgY29vcmRpbmF0ZXMg
dGhhdCBvdXIgZ3RrIHdpZGdldCByZW5kZXJpbmcgZXhwZWN0cy4KLSAgICAvLyBXZSBpbnZlcnQg
aXQgYmVjYXVzZSB3ZSB3YW50IHRvIG1hcCBmcm9tIGRldmljZSBjb29yZGluYXRlcyB0byBwYWdl
IGNvb3JkaW5hdGVzLgotICAgIGNvbnN0IFNrSVJlY3QgY2xpcFJlZ2lvbiA9IGNhbnZhcy0+Z2V0
VG90YWxDbGlwKCkuZ2V0Qm91bmRzKCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtID0g
aS5jb250ZXh0LT5nZXRDVE0oKS5pbnZlcnNlKCk7Ci0gICAgSW50UG9pbnQgcG9zID0gY3RtLm1h
cFBvaW50KEludFBvaW50KFNrU2NhbGFyUm91bmQoY2xpcFJlZ2lvbi5mTGVmdCksIFNrU2NhbGFy
Um91bmQoY2xpcFJlZ2lvbi5mVG9wKSkpOwotICAgIEdka1JlY3RhbmdsZSBnZGtDbGlwUmVjdDsK
LSAgICBnZGtDbGlwUmVjdC54ID0gcG9zLngoKTsKLSAgICBnZGtDbGlwUmVjdC55ID0gcG9zLnko
KTsKLSAgICBnZGtDbGlwUmVjdC53aWR0aCA9IGNsaXBSZWdpb24ud2lkdGgoKTsKLSAgICBnZGtD
bGlwUmVjdC5oZWlnaHQgPSBjbGlwUmVnaW9uLmhlaWdodCgpOwotCi0gICAgLy8gbW96X2d0a193
aWRnZXRfcGFpbnQgd2lsbCBwYWludCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgZ2RrUmVjdCB1bmxl
c3Mgd2UgZnVydGhlciByZXN0cmljdCB8Z2RrQ2xpcFJlY3R8LgotICAgIGdka19yZWN0YW5nbGVf
aW50ZXJzZWN0KCZnZGtSZWN0LCAmZ2RrQ2xpcFJlY3QsICZnZGtDbGlwUmVjdCk7Ci0KLSAgICBH
dGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGd0a1RleHREaXJlY3Rpb24oby0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkpOwotCi0gICAgcmV0dXJuIG1vel9ndGtfd2lkZ2V0X3BhaW50KHR5cGUsIHBj
cy0+Z2RrX3NraWEoKSwgJmdka1JlY3QsICZnZGtDbGlwUmVjdCwgJm1velN0YXRlLCBmbGFncywg
ZGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB2b2lkIGd0a1N0eWxl
U2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBwcmV2aW91cywgUmVuZGVy
VGhlbWUqIHJlbmRlclRoZW1lKQotewotICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5j
dGlvbiBkb2Vzbid0IGdldCBjYWxsZWQgbWFueSB0aW1lcyBmb3IgYSBzaW5nbGUgR1RLKyBzdHls
ZSBjaGFuZ2Ugc2lnbmFsLgotICAgIHJlbmRlclRoZW1lLT5wbGF0Zm9ybUNvbG9yc0RpZENoYW5n
ZSgpOwotfQotCi1zdGF0aWMgZG91YmxlIHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChkb3VibGUg
ZGVmYXVsdEludGVydmFsKQotewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0
aW5nc19nZXRfZGVmYXVsdCgpOwotCi0gICAgZ2Jvb2xlYW4gc2hvdWxkQmxpbms7Ci0gICAgZ2lu
dCB0aW1lOwotCi0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWN1cnNvci1ibGluayIs
ICZzaG91bGRCbGluaywgImd0ay1jdXJzb3ItYmxpbmstdGltZSIsICZ0aW1lLCBOVUxMKTsKLQot
ICAgIGlmICghc2hvdWxkQmxpbmspCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHRp
bWUgLyAxMDAwLjA7Ci19Ci0KLS8vIEltcGxlbWVudCBXZWJDb3JlOjp0aGVtZSgpIGZvciBnZXR0
aW5nIHRoZSBnbG9iYWwgUmVuZGVyVGhlbWUuCiBSZW5kZXJUaGVtZSogdGhlbWUoKQogewotICAg
IHN0YXRpYyBSZW5kZXJUaGVtZUNocm9taXVtR3RrIGd0a1RoZW1lOwotICAgIHJldHVybiAmZ3Rr
VGhlbWU7CisgICAgc3RhdGljIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCB0aGVtZTsKKyAgICBy
ZXR1cm4gJnRoZW1lOwogfQogCi1SZW5kZXJUaGVtZUNocm9taXVtR3RrOjpSZW5kZXJUaGVtZUNo
cm9taXVtR3RrKCkKLSAgICA6IG1fZ3RrV2luZG93KDApCi0gICAgLCBtX2d0a0NvbnRhaW5lcigw
KQotICAgICwgbV9ndGtFbnRyeSgwKQotICAgICwgbV9ndGtUcmVlVmlldygwKQorUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQogewogfQogCiAvLyBV
c2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRzIHRvIG1hdGNoIHRoZWlyIG1ldHJpY3MuCi1TdHJp
bmcgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCitTdHJp
bmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKIHsK
ICAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRo
ZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyh0
aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1Vz
ZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBl
YXJhbmNlKCkpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKIHsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIG1h
a2VDb2xvcih3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFURV9TRUxFQ1RFRF0pOworICAgIHJl
dHVybiBDb2xvcigweDFlLCAweDkwLCAweGZmKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3Rr
RW50cnkoKTsKLSAgICByZXR1cm4gbWFrZUNvbG9yKHdpZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NU
QVRFX0FDVElWRV0pOworICAgIHJldHVybiBDb2xvcigweGM4LCAweGM4LCAweGM4KTsKIH0KIAot
Q29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0LT5z
dHlsZS0+dGV4dFtHVEtfU1RBVEVfU0VMRUNURURdKTsKKyAgICByZXR1cm4gQ29sb3IoMCwgMCwg
MCk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
IHsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIG1ha2VD
b2xvcih3aWRnZXQtPnN0eWxlLT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdKTsKKyAgICByZXR1cm4g
Q29sb3IoMHgzMiwgMHgzMiwgMHgzMik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1H
dGs6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBj
b25zdAogewotICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMTUwKTsKKyAgICByZXR1cm4gQ29s
b3IoMHhmZiwgMHhmZiwgMHg5Nik7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtR3Rr
OjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKIHsKICAgICAvLyBEaXNhYmxlIHRoZSBi
bGlua2luZyBjYXJldCBpbiBsYXlvdXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCiAgICAg
Ly8gYSByYWNlIGNvbmRpdGlvbiBmb3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQw
CkBAIC0yODgsMjQxICsxMzYsMjUxIEBAIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpj
YXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFdl
IGNhY2hlIHRoZSBpbnRlcnZhbCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcmVxdWVz
dCBpdCBmcm9tIGd0ay4KLSAgICBzdGF0aWMgZG91YmxlIGJsaW5rSW50ZXJ2YWwgPSBxdWVyeVN5
c3RlbUJsaW5rSW50ZXJ2YWwoUmVuZGVyVGhlbWU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpKTsKLSAg
ICByZXR1cm4gYmxpbmtJbnRlcnZhbDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtR3Rr
OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIERvY3VtZW50KiBkb2N1bWVudCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgY29uc3QgY2hhciogZmFjZU5hbWUg
PSAwOwotICAgIGZsb2F0IGZvbnRTaXplID0gMDsKLSAgICAvLyBGSVhNRTogc2VlIGFsc28gUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2Ug
Q1NTVmFsdWVNZW51OgotICAgIGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6Ci0gICAgY2FzZSBDU1NW
YWx1ZVNtYWxsQ2FwdGlvbjoKLSAgICAgICAgLy8gdHJpZ2dlcmVkIGJ5IExheW91dFRlc3RzL2Zh
c3QvY3NzL2NzczItc3lzdGVtLWZvbnRzLmh0bWwKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgotICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dENvbnRyb2w6Ci0gICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoZG9jdW1lbnQpOwot
ICAgICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gIEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vj
a28gZG9lcy4KLSAgICAgICAgZm9udFNpemUgPSBEZWZhdWx0Rm9udFNpemUgLSBwb2ludHNUb1Bp
eGVscygyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZmFjZU5hbWUg
PSBkZWZhdWx0R1VJRm9udChkb2N1bWVudCk7Ci0gICAgICAgIGZvbnRTaXplID0gRGVmYXVsdEZv
bnRTaXplOwotICAgIH0KKyAgICByZXR1cm4gMC41OworfQogCi0gICAgLy8gT25seSB1cGRhdGUg
aWYgdGhlIHNpemUgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKGZvbnRTaXplID4gMCkgewotICAgICAg
ICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZmFjZU5hbWUpOwotICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7Ci0gICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0g
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwotICAgIH0KK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIERvY3VtZW50KiBkb2N1
bWVudCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KE5VTEwp
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZSgxMik7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldEl0YWxpYyhmYWxzZSk7CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjptaW5p
bXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIHJldHVybiAwOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6
OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TW96
V2lkZ2V0KHRoaXMsIE1PWl9HVEtfQ0hFQ0tCVVRUT04sIG8sIGksIHJlY3QpOworICAgIHN0YXRp
YyBJbWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJsaW51eENoZWNrYm94T24iKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjb25z
dCB1bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVj
a2JveE9mZiIpLnJlbGVhc2VSZWYoKTsKKworICAgIEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hl
Y2tlZChvKSA/IGNoZWNrZWRJbWFnZSA6IHVuY2hlY2tlZEltYWdlOworICAgIGkuY29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVk
IHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93
LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgotICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mg
b24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRo
YXQgYWNjb3VudHMgZm9yCi0gICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJl
IGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5
IG9uIHRoZSB0aGVtZSdzCi0gICAgLy8gbWV0cmljcy4KKyAgICAvLyBGSVhNRTogIEEgaGFyZC1j
b2RlZCBzaXplIG9mIDEzIGlzIHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkKKyAg
ICAvLyBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LiAgQXQgZGlmZmVyZW50IERQSSBzZXR0
aW5ncyBvbiBXaW5kb3dzLAorICAgIC8vIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBs
YXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvciB0aGUgaGlnaGVyCisgICAgLy8gRFBJLiAgVW50
aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwg
d2UKKyAgICAvLyBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzIG1ldHJpY3MuCiAgICAgY29uc3Qg
SW50U2l6ZSBzaXplKDEzLCAxMyk7CiAgICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6ZSk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9aX0dUS19SQURJT0JVVFRP
TiwgbywgaSwgcmVjdCk7CisgICAgc3RhdGljIEltYWdlKiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4UmFkaW9PbiIpLnJlbGVhc2VSZWYoKTsK
KyAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT2ZmIikucmVsZWFzZVJlZigpOworCisgICAgSW1hZ2Uq
IGltYWdlID0gdGhpcy0+aXNDaGVja2VkKG8pID8gY2hlY2tlZEltYWdlIDogdW5jaGVja2VkSW1h
Z2U7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIHJlY3QpOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpzZXRSYWRpb1NpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gVXNlIHNhbWUg
c2l6aW5nIGZvciByYWRpbyBib3ggYXMgY2hlY2tib3guCiAgICAgc2V0Q2hlY2tib3hTaXplKHN0
eWxlKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQorc3RhdGljIHZvaWQgcGFpbnRCdXR0b25MaWtlKFJlbmRlclRoZW1lKiB0aGVt
ZSwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkgeworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBTa1BhaW50IHBhaW50OworICAg
IFNrUmVjdCBza3JlY3Q7CisgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0Lndp
ZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsK
KworICAgIC8vIElmIHRoZSBidXR0b24gaXMgdG9vIHNtYWxsLCBmYWxsYmFjayB0byBkcmF3aW5n
IGEgc2luZ2xlLCBzb2xpZCBjb2xvcgorICAgIGlmIChyZWN0LndpZHRoKCkgPCA1IHx8IHJlY3Qu
aGVpZ2h0KCkgPCA1KSB7CisgICAgICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhlOSwgMHhlOSwg
MHhlOSk7CisgICAgICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByaWdodCwgYm90
dG9tKTsKKyAgICAgICAgY2FudmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGludCBib3JkZXJBbHBoYSA9IHRoZW1lLT5pc0hv
dmVyZWQobykgPyAweDgwIDogMHg1NTsKKyAgICBwYWludC5zZXRBUkdCKGJvcmRlckFscGhhLCAw
LCAwLCAwKTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpICsgMSwgcmVjdC55KCksIHJp
Z2h0IC0gMSwgcmVjdC55KCksIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJpZ2h0IC0g
MSwgcmVjdC55KCkgKyAxLCByaWdodCAtIDEsIGJvdHRvbSAtIDEsIHBhaW50KTsKKyAgICBjYW52
YXMtPmRyYXdMaW5lKHJlY3QueCgpICsgMSwgYm90dG9tIC0gMSwgcmlnaHQgLSAxLCBib3R0b20g
LSAxLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSwgcmVjdC55KCkgKyAx
LCByZWN0LngoKSwgYm90dG9tIC0gMSwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0QVJHQigweGZm
LCAwLCAwLCAwKTsKKyAgICBTa1BvaW50IHBbMl07CisgICAgY29uc3QgaW50IGxpZ2h0RW5kID0g
dGhlbWUtPmlzUHJlc3NlZChvKSA/IDEgOiAwOworICAgIGNvbnN0IGludCBkYXJrRW5kID0gIWxp
Z2h0RW5kOworICAgIHBbbGlnaHRFbmRdLnNldChTa0ludFRvU2NhbGFyKHJlY3QueCgpKSwgU2tJ
bnRUb1NjYWxhcihyZWN0LnkoKSkpOworICAgIHBbZGFya0VuZF0uc2V0KFNrSW50VG9TY2FsYXIo
cmVjdC54KCkpLCBTa0ludFRvU2NhbGFyKGJvdHRvbSAtIDEpKTsKKyAgICBTa0NvbG9yIGNvbG9y
c1syXTsKKyAgICBjb2xvcnNbMF0gPSBTa0NvbG9yU2V0QVJHQigweGZmLCAweGY4LCAweGY4LCAw
eGY4KTsKKyAgICBjb2xvcnNbMV0gPSBTa0NvbG9yU2V0QVJHQigweGZmLCAweGRkLCAweGRkLCAw
eGRkKTsKKworICAgIFNrU2hhZGVyKiBzID0gU2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlTGluZWFy
KAorICAgICAgICBwLCBjb2xvcnMsIE5VTEwsIDIsIFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGUs
IE5VTEwpOworICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKKyAgICBw
YWludC5zZXRTaGFkZXIocyk7CisgICAgcy0+dW5yZWYoKTsKKworICAgIHNrcmVjdC5zZXQocmVj
dC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSk7CisgICAgY2Fu
dmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKKworICAgIHBhaW50LnNldFNoYWRlcihOVUxM
KTsKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDB4Y2UsIDB4Y2UsIDB4Y2UpOworICAgIGNhbnZh
cy0+ZHJhd1BvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyAxLCBwYWludCk7CisgICAgY2Fu
dmFzLT5kcmF3UG9pbnQocmlnaHQgLSAyLCByZWN0LnkoKSArIDEsIHBhaW50KTsKKyAgICBjYW52
YXMtPmRyYXdQb2ludChyZWN0LngoKSArIDEsIGJvdHRvbSAtIDIsIHBhaW50KTsKKyAgICBjYW52
YXMtPmRyYXdQb2ludChyaWdodCAtIDIsIGJvdHRvbSAtIDIsIHBhaW50KTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0g
ICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfQlVUVE9OLCBvLCBpLCByZWN0
KTsKKyAgICBwYWludEJ1dHRvbkxpa2UodGhpcywgbywgaSwgcmVjdCk7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OnBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9a
X0dUS19FTlRSWSwgbywgaSwgcmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfQ0hFQ0tNRU5VSVRF
TSwgbywgaSwgcmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBN
T1pfR1RLX0RST1BET1dOX0FSUk9XLCBvLCBpLCByZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWlu
dE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0NIRUNLTUVOVUlURU0sIG8sIGksIHJlY3QpOworICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmFkanVzdE1l
bnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8gSGVp
Z2h0IGlzIGxvY2tlZCB0byBhdXRvIG9uIGFsbCBicm93c2Vycy4KICAgICBzdHlsZS0+c2V0TGlu
ZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9aX0dUS19EUk9QRE9XTiwgbywgaSwg
cmVjdCk7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOworICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVj
dC53aWR0aCgpOworICAgIGNvbnN0IGludCBtaWRkbGUgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLyAyOworCisgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJlY3QpOworCisgICAg
U2tQYWludCBwYWludDsKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDApOworICAgIHBh
aW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmls
bF9TdHlsZSk7CisKKyAgICBTa1BhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVUbyhyaWdodCAtIDEz
LCBtaWRkbGUgLSAzKTsKKyAgICBwYXRoLnJMaW5lVG8oNiwgMCk7CisgICAgcGF0aC5yTGluZVRv
KC0zLCA2KTsKKyAgICBwYXRoLmNsb3NlKCk7CisgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBw
YWludCk7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bUd0azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAg
ICBhZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CiB9CiAKIC8vIFVzZWQg
dG8gcGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQgYm9yZGVy
KQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludE1lbnVMaXN0KG8sIGksIHIpOwor
ICAgIHJldHVybiBwYWludE1lbnVMaXN0KG8sIGksIHJlY3QpOwogfQogCi1pbnQgUmVuZGVyVGhl
bWVDaHJvbWl1bUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0
SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBMZWZ0UGFkZGluZyk7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZUNocm9taXVtR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBtZW51TGlz
dEludGVybmFsUGFkZGluZyhzdHlsZSwgUmlnaHRQYWRkaW5nKTsKIH0KIAotaW50IFJlbmRlclRo
ZW1lQ2hyb21pdW1HdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmcoc3R5bGUsIFRvcFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBtZW51TGlz
dEludGVybmFsUGFkZGluZyhzdHlsZSwgQm90dG9tUGFkZGluZyk7CiB9CiAKLWludCBSZW5kZXJU
aGVtZVdpbjo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIDM7CiB9CiAKLWludCBSZW5kZXJUaGVtZVdpbjo6YnV0dG9uSW50ZXJuYWxQYWRk
aW5nUmlnaHQoKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvbklu
dGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gMzsKIH0KIAotaW50IFJl
bmRlclRoZW1lV2luOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvbkludGVybmFsUGFkZGluZ1RvcCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIDE7CiB9CiAKLWludCBSZW5kZXJUaGVtZVdpbjo6YnV0dG9uSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0
b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAogewogICAgIHJldHVybiAxOwogfQogCi1i
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGlzRW5hYmxlZChvKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6YWN0
aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lkZ2V0
LT5zdHlsZS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhl
bWVDaHJvbWl1bUd0azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVy
biBtYWtlQ29sb3Iod2lkZ2V0LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVfU0VMRUNURURdKTsKLX0K
LQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgR3Rr
V2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBtYWtlQ29sb3Iod2lk
Z2V0LT5zdHlsZS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXSk7CisgICAgcmV0dXJuIENvbG9yKDB4
MjgsIDB4MjgsIDB4MjgpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjppbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKIHsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAg
cmV0dXJuIG1ha2VDb2xvcih3aWRnZXQtPnN0eWxlLT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdKTsK
KyAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCk7CiB9CiAKLUd0a1dpZGdldCogUmVuZGVyVGhlbWVD
aHJvbWl1bUd0azo6Z3RrRW50cnkoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewot
ICAgIGlmIChtX2d0a0VudHJ5KQotICAgICAgICByZXR1cm4gbV9ndGtFbnRyeTsKLQotICAgIG1f
Z3RrRW50cnkgPSBndGtfZW50cnlfbmV3KCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2d0a0Vu
dHJ5LCAic3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNldENhbGxiYWNrKSwgdGhlbWUo
KSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoZ3RrQ29udGFpbmVyKCksIG1fZ3RrRW50cnkpOwot
ICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a0VudHJ5KTsKLQotICAgIHJldHVybiBtX2d0a0Vu
dHJ5OworICAgIHJldHVybiBDb2xvcigweGM4LCAweGM4LCAweGM4KTsKIH0KIAotR3RrV2lkZ2V0
KiBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjpndGtUcmVlVmlldygpIGNvbnN0CitDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZ3RrVHJlZVZpZXcpCi0gICAgICAgIHJldHVybiBt
X2d0a1RyZWVWaWV3OwotCi0gICAgbV9ndGtUcmVlVmlldyA9IGd0a190cmVlX3ZpZXdfbmV3KCk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2d0a1RyZWVWaWV3LCAic3R5bGUtc2V0IiwgR19DQUxM
QkFDSyhndGtTdHlsZVNldENhbGxiYWNrKSwgdGhlbWUoKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoZ3RrQ29udGFpbmVyKCksIG1fZ3RrVHJlZVZpZXcpOwotICAgIGd0a193aWRnZXRfcmVhbGl6
ZShtX2d0a1RyZWVWaWV3KTsKLQotICAgIHJldHVybiBtX2d0a1RyZWVWaWV3OwotfQotCi1HdGtD
b250YWluZXIqIFJlbmRlclRoZW1lQ2hyb21pdW1HdGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fZ3RrQ29udGFpbmVyKQotICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7
Ci0KLSAgICBtX2d0a1dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwot
ICAgIG1fZ3RrQ29udGFpbmVyID0gR1RLX0NPTlRBSU5FUihndGtfZml4ZWRfbmV3KCkpOwotICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9ndGtXaW5kb3cpLCBHVEtfV0lER0VU
KG1fZ3RrQ29udGFpbmVyKSk7Ci0gICAgZ3RrX3dpZGdldF9yZWFsaXplKG1fZ3RrV2luZG93KTsK
LQotICAgIHJldHVybiBtX2d0a0NvbnRhaW5lcjsKKyAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgz
MiwgMHgzMik7CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjptZW51TGlzdEludGVy
bmFsUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKK2lu
dCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6Om1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRl
clN0eWxlKiBzdHlsZSwgaW50IHBhZGRpbmdUeXBlKSBjb25zdAogewogICAgIC8vIFRoaXMgaW50
ZXJuYWwgcGFkZGluZyBpcyBpbiBhZGRpdGlvbiB0byB0aGUgdXNlci1zdXBwbGllZCBwYWRkaW5n
LgogICAgIC8vIE1hdGNoZXMgdGhlIEZGIGJlaGF2aW9yLgpAQCAtNTQwLDQgKzM5OCw0IEBAIGlu
dCBSZW5kZXJUaGVtZUNocm9taXVtR3RrOjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJT
dHlsZSogc3R5bGUsIGludCBwYWRkCiAgICAgcmV0dXJuIHBhZGRpbmc7CiB9CiAKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUg
ZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtR3RrLmgKcmVuYW1lIHRv
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCmluZGV4IDU4ZjM4
NTIuLmRiZThkY2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1HdGsuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGlu
dXguaApAQCAtMjUsMTkgKzI1LDE3IEBACiAgKgogICovCiAKLSNpZm5kZWYgUmVuZGVyVGhlbWVD
aHJvbWl1bUd0a19oCi0jZGVmaW5lIFJlbmRlclRoZW1lQ2hyb21pdW1HdGtfaAorI2lmbmRlZiBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXhfaAorI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXhfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKIAotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bUd0
ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CisgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4IDogcHVibGljIFJlbmRlclRoZW1lIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlbmRlclRo
ZW1lQ2hyb21pdW1HdGsoKTsKLSAgICAgICAgflJlbmRlclRoZW1lQ2hyb21pdW1HdGsoKSB7IH0K
KyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7CisgICAgICAgIH5SZW5kZXJUaGVt
ZUNocm9taXVtTGludXgoKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1
bHRTdHlsZVNoZWV0KCk7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVT
aGVldCgpOwpAQCAtMTE4LDIwICsxMTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBIb2xkIHRoZSBzdGF0ZQotICAgICAg
ICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7Ci0gICAgICAgIEd0a1dpZGdldCogZ3RrVHJl
ZVZpZXcoKSBjb25zdDsKLQotICAgICAgICAvLyBVbm1hcHBlZCBHZGtXaW5kb3cgaGF2aW5nIGEg
Y29udGFpbmVyLiBUaGlzIGlzIGhvbGRpbmcgYWxsIG91ciBmYWtlIHdpZGdldHMKLSAgICAgICAg
R3RrQ29udGFpbmVyKiBndGtDb250YWluZXIoKSBjb25zdDsKLQotICAgIHByaXZhdGU6CiAgICAg
ICAgIGludCBtZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5n
VHlwZSkgY29uc3Q7Ci0KLSAgICAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93Owot
ICAgICAgICBtdXRhYmxlIEd0a0NvbnRhaW5lciogbV9ndGtDb250YWluZXI7Ci0gICAgICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0VudHJ5OwotICAgICAgICBtdXRhYmxlIEd0a1dpZGdldCog
bV9ndGtUcmVlVmlldzsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>